How to distinguish between move and click in onTouchEvent()?

后端 未结 10 2148
暖寄归人
暖寄归人 2020-11-28 22:30

In my application, I need to handle both move and click events.

A click is a sequence of one ACTION_DOWN action, several ACTION_MOVE actions and one ACTION_UP action

10条回答
  •  猫巷女王i
    2020-11-28 23:28

    Adding to the above answers ,if you want to implement both onClick and Drag actions then my code below can you guys. Taking some of the help from @Stimsoni :

         // assumed all the variables are declared globally; 
    
        public boolean onTouch(View view, MotionEvent event) {
    
          int MAX_CLICK_DURATION = 400;
          int MAX_CLICK_DISTANCE = 5;
    
    
            switch (event.getAction())
            {
                case MotionEvent.ACTION_DOWN: {
                    long clickDuration1 = Calendar.getInstance().getTimeInMillis() - startClickTime;
    
    
                        startClickTime = Calendar.getInstance().getTimeInMillis();
                        x1 = event.getX();
                        y1 = event.getY();
    
    
                        break;
    
                }
                case MotionEvent.ACTION_UP:
                {
                    long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                    x2 = event.getX();
                    y2 = event.getY();
                    dx = x2-x1;
                    dy = y2-y1;
    
                    if(clickDuration < MAX_CLICK_DURATION && dx < MAX_CLICK_DISTANCE && dy < MAX_CLICK_DISTANCE) {
                        Toast.makeText(getApplicationContext(), "item clicked", Toast.LENGTH_SHORT).show();
                        Log.d("clicked", "On Item Clicked:: ");
    
                   //    imageClickAction((ImageView) view,rl);
                    }
    
                }
                case MotionEvent.ACTION_MOVE:
    
                    long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                    x2 = event.getX();
                    y2 = event.getY();
                    dx = x2-x1;
                    dy = y2-y1;
    
                    if(clickDuration < MAX_CLICK_DURATION && dx < MAX_CLICK_DISTANCE && dy < MAX_CLICK_DISTANCE) {
                        //Toast.makeText(getApplicationContext(), "item clicked", Toast.LENGTH_SHORT).show();
                      //  Log.d("clicked", "On Item Clicked:: ");
    
                        //    imageClickAction((ImageView) view,rl);
                    }
                    else {
                        ClipData clipData = ClipData.newPlainText("", "");
                        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
    
                        //Toast.makeText(getApplicationContext(), "item dragged", Toast.LENGTH_SHORT).show();
                        view.startDrag(clipData, shadowBuilder, view, 0);
                    }
                    break;
            }
    
            return  false;
        }
    

提交回复
热议问题