android - event.getAction() 从不使用 MotionEvent.ACTION_UP

标签 android motionevent

我对 OnTouchListener 中的 MotionEvent 有疑问。 ACTION_DOWN 完美运行,但它从不使用 ACTION_UP 我真的不知道我的问题出在哪里,所以如果有人可以帮助我,那就太好了,谢谢。

public class MainActivity extends Activity {
    View.OnTouchListener gestureListener;
    private static final int MIN_DISTANCE = 50; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 
        layout.setOnTouchListener(new View.OnTouchListener() {

            float downX = 0, downY; 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub

                switch(event.getAction()){
                case MotionEvent.ACTION_DOWN :
                        downX = event.getX(); 
                        downY = event.getY();
                        Toast.makeText(getApplicationContext(), "action down", Toast.LENGTH_SHORT).show();
                    break;
                case MotionEvent.ACTION_UP : 

                    Toast.makeText(getApplicationContext(), "action up", Toast.LENGTH_SHORT).show();
                        float deltaX = downX - event.getX(); 
                        Toast.makeText(getApplicationContext(), Math.abs(deltaX)+"k", Toast.LENGTH_SHORT).show();
                        if (Math.abs(deltaX) > 3){
                            if(deltaX < 0) { onLeftToRightSwipe(); return true; }
                            if(deltaX > 0) { onRightToLeftSwipe(); return true; }
                        }
                        else {
                                String str = "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE;
                                Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
                                return false; 
                        }
                    break;
                }
                return false;
            }
        });
    }


    private void onRightToLeftSwipe() {
        Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
    }

    private void onLeftToRightSwipe() {
        Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
    }


}

最佳答案

如果您在 Action_Down 上向 onTouch 返回 false,您将不会在 Action_Up 上收到通知。

在 Action_Down 上返回 true 告诉 Android 你想继续接收这个触摸事件的更新。返回 false 表示您不想接收进一步的更新。

关于android - event.getAction() 从不使用 MotionEvent.ACTION_UP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359849/

相关文章:

android - 如何在 Android 中合并两个 SimpleCursorAdapters?

javascript - chrome 54 中默认使用前置摄像头的 webrtc

java - 从网页解析 JSON 文件并将值存储在二维数组中

Android加速度计灵敏度编程

android - 在 phonegap 中播放本地声音

Android检测双指长按

java - 如何仅在特定时间调用函数

android - 为什么 ACTION_OUTSIDE 在 KitKat 4.4.2 上每次都返回 0?

emacs - 按住 Shift 时,用于移动的键绑定(bind)不会扩展区域

java - 获取按钮坐标并检测手指是否在它们上面 - Android