【问题标题】:Android FAB drag and dropAndroid FAB 拖放
【发布时间】:2016-10-13 19:40:18
【问题描述】:

我的 Activity 中需要一个 FloatingActionButton (FAB),您可以拖动它。但你也可以点击它。我从另一篇文章中复制了这个:

fab.setOnTouchListener(new View.OnTouchListener() {

                float startX;
                int lastAction;

                @Override
                public boolean onTouch(View view, MotionEvent event) {
                    switch (event.getActionMasked()) {
                        case MotionEvent.ACTION_DOWN:
                            startX = view.getX() - event.getRawX();
                            lastAction = MotionEvent.ACTION_DOWN;
                            break;

                        case MotionEvent.ACTION_MOVE:
                            view.setX(event.getRawX() + startX);
                            lastAction = MotionEvent.ACTION_MOVE;
                            break;

                        case MotionEvent.ACTION_UP:
                            if (lastAction == MotionEvent.ACTION_DOWN){
                               edit();
                            }
                            break;
                        case MotionEvent.ACTION_BUTTON_PRESS:

                        default:
                            return false;
                    }
                    return true;
                }
            });

问题是:如果您想经常点击它,它不会将其识别为点击,而是将其识别为移动。所以这不是很精确。如何更改代码以使其更好?

【问题讨论】:

    标签: android button drag floating-action-button


    【解决方案1】:

    检查拖动的距离,如果它小于 10px => 用户可能不想拖动。

     fab.setOnTouchListener(new View.OnTouchListener() {
    
                float startX;
                float startRawX;
                float distanceX;
                int lastAction;
    
                @Override
                public boolean onTouch(View view, MotionEvent event) {
                    switch (event.getActionMasked()) {
                        case MotionEvent.ACTION_DOWN:
                            startX = view.getX() - event.getRawX();
                            startRawX = event.getRawX();
                            lastAction = MotionEvent.ACTION_DOWN;
                            break;
    
                        case MotionEvent.ACTION_MOVE:
                            view.setX(event.getRawX() + startX);
    
                            lastAction = MotionEvent.ACTION_MOVE;
                            break;
    
                        case MotionEvent.ACTION_UP:
                            distanceX = event.getRawX()-startRawX;
                            if (Math.abs(distanceX)< 10){
                              edit();
                            }
                            break;
                        case MotionEvent.ACTION_BUTTON_PRESS:
    
                        default:
                            return false;
                    }
                    return true;
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多