简体   繁体   English

Android MotionEvent.ACTION_MOVE和MotionEvent.ACTION_UP

[英]Android MotionEvent.ACTION_MOVE and MotionEvent.ACTION_UP

im trying to implement swipe for my list view item, i have hidden element (like a button ) i want swipe left/right item for showing this button. 我正在尝试为我的列表视图项目实施滑动,我已经隐藏了元素(如button),我想向左/向右滑动项目以显示此按钮。 Everything work perfect. 一切正常。 Except i cant click normally on item or button. 除了我不能正常单击项目或按钮。 Because event MotionEvent.ACTION_UP always triggered. 因为事件MotionEvent.ACTION_UP总是触发。 Log when i just make simple click/touch on item 当我只是简单地单击/触摸项目时记录

 Action DOWN
 OLD X = -329.0
 DX = -329.0
 MOVE RIGHT
 OLD X = -329.0
 DX = -330.5
 MOVE RIGHT
 OLD X = -329.0
 DX = -330.95996
 MOVE RIGHT
 Action UP

Can any help me ? 有什么可以帮助我的吗? For click on items im trying to use this code 对于试图使用此代码的项目的点击

float cx = event.getX();
  if(cx<width && cx>(width-150)) {

and my code 和我的代码

swipeLayout.setOnTouchListener(new View.OnTouchListener() {
            private boolean canClick = false;


            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        x1 = event.getX();
                        dX = view.getX() - event.getRawX();
                        dY = view.getY() - event.getRawY();
                        Logger.e("Action DOWN");
                        oldX = dX;
                        return true;
                    case MotionEvent.ACTION_MOVE:

                        Logger.e("OLD X = " + oldX);
                        Logger.e("DX = " + dX);
                        dX = view.getX() - event.getRawX();
                        if (oldX < dX) {
                            Logger.e("MOVE LEFT");
                            view.animate().x(-100).setDuration(50).start();
                            break;
                        }

                        if (oldX > dX) {
                            Logger.e("MOVE RIGHT");
                            view.animate().x(0).setDuration(50).start();
                            break;
                        }


                    case MotionEvent.ACTION_UP:
                        Logger.e("Action UP");
                }
                return false;
            }
        });

Consider using GestureDetector to handle swiping. 考虑使用GestureDetector处理滑动。 Here is the possible example: 这是可能的示例:

new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                    float velocityY) {
                // Here you handle short quick swipe gesture
                return super.onFling(e1, e2, velocityX, velocityY);
            }

            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                    float distanceY) {
                // Here you handle slow finger movement across the screen
                return super.onScroll(e1, e2, distanceX, distanceY);
            }
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM