где я должен реализовать setOnTouchListener для основной деятельности - PullRequest
0 голосов
/ 27 июня 2018

У меня есть ActivityMain, у которого есть внутренний класс OnSwipeTouchListener, этот класс содержит логику для сенсорных жестов. Но я не знаю, как реализовать пролистывание влево и вправо в моей функции onCreate. Я предполагаю, что мне нужно было бы реализовать это в View или this в ссылках на mainacctivity. Но я не могу понять, как. Если кто-то может указать, как вызывать onSwipeRight и onSwipeLeft внутри метода onCreate, приветствуется.

package org.pctechtips.zentech.TestApp;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * Gestures and swipe class
     */
    public class OnSwipeTouchListener implements View.OnTouchListener {

        private final GestureDetector gestureDetector;

        public OnSwipeTouchListener (Context ctx){
            gestureDetector = new GestureDetector(ctx, new GestureListener());
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }

        private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

            private static final int SWIPE_THRESHOLD = 100;
            private static final int SWIPE_VELOCITY_THRESHOLD = 100;

            @Override
            public boolean onDown(MotionEvent e) {
                return true;
            }

            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                boolean result = false;
                try {
                    float diffY = e2.getY() - e1.getY();
                    float diffX = e2.getX() - e1.getX();
                    if (Math.abs(diffX) > Math.abs(diffY)) {
                        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                            if (diffX > 0) {
                                onSwipeRight();
                            } else {
                                onSwipeLeft();
                            }
                            result = true;
                        }
                    }
                    else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                        result = true;
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
                return result;
            }
        }

        public void onSwipeRight() {
            Toast.makeText(MainActivity.this, "Right", Toast.LENGTH_SHORT).show();
        }

        public void onSwipeLeft() {
            Toast.makeText(getApplicationContext(), "Left", Toast.LENGTH_SHORT).show();
        }

        public void onSwipeTop() {
        }

        public void onSwipeBottom() {
        }
    }
}

1 Ответ

0 голосов
/ 27 июня 2018

я отвечаю на этот вопрос в https://stackoverflow.com/a/54004270/3279535

есть хороший код

...