我应该在哪里为主要活动实现setOnTouchListener [英] where should I implement setOnTouchListener for Main Activity

查看:87
本文介绍了我应该在哪里为主要活动实现setOnTouchListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有ActivityMain,该类具有OnSwipeTouchListener的内部类,该类包含触摸手势的逻辑.但是我不知道如何在我的onCreate函数中实现左右滑动.我想我需要在View或其他实现中引用mainactivity来实现它.但是我不知道怎么做.如果有人可以指出如何在onCreate方法中调用onSwipeRight和onSwipeLeft,就可以了.

I have ActivityMain which has inner class of OnSwipeTouchListener this class contains the logic for touch gestures. But I don't know how to implement swipe left and right within my onCreate function. I guess I would need to implement it on the View or this in referencing mainactivity. But I can't figure out how. If someone can point out how to call onSwipeRight and onSwipeLeft inside the onCreate method, appreciated.

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() {
        }
    }
}

推荐答案

我在 https://stackoverflow.com/中回答了这个问题a/54004270/3279535

有不错的代码

这篇关于我应该在哪里为主要活动实现setOnTouchListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆