【问题标题】:Android floating action button with drag-drop functionality具有拖放功能的 Android 浮动操作按钮
【发布时间】:2016-05-28 07:05:33
【问题描述】:

如何在类似 Flipkart 应用的 Android 中使用浮动操作按钮实现拖放

【问题讨论】:

  • 欢迎来到 Stack Overflow!这个问题非常广泛——如果您提供更多细节,它将帮助我们回答这个问题。另外,您有可以发布的特定代码吗?
  • 您还可以查看“相关”问题(在此页面右侧的侧边栏中)。
  • 这不是一个广泛的问题。我提到就像flipkart应用程序不一样,使用fab的拖放功能
  • 我不知道是谁否决了这个问题。不是我。
  • 我赞成取消 -1 的问题。

标签: android android-layout floating-action-button


【解决方案1】:

通过setOnTouchListener和监听事件可以实现fab在屏幕周围的拖放功能,请尝试下面的代码

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);
                        view.setY(event.getRawY() + startX);

                        lastAction = MotionEvent.ACTION_MOVE;
                        break;

                    case MotionEvent.ACTION_UP:
                        distanceX = event.getRawX()-startRawX;
                        if (Math.abs(distanceX)< 10){
                            Toast.makeText(getActivity(), "FAB CLICKED", Toast.LENGTH_SHORT).show();
                        }
                        break;
                    case MotionEvent.ACTION_BUTTON_PRESS:

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

【讨论】:

    【解决方案2】:

    可拖动的浮动操作按钮:

     fabCreate = (FloatingActionButton)view.findViewById(R.id.btnCreate);
     fabCreate.setOnTouchListener(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View view, MotionEvent event) {
              switch (event.getActionMasked()) {
                  case MotionEvent.ACTION_DOWN:
                      dX = view.getX() - event.getRawX();
                      dY = view.getY() - event.getRawY();
                      lastAction = MotionEvent.ACTION_DOWN;
                      break;
    
                  case MotionEvent.ACTION_MOVE:
                      view.setY(event.getRawY() + dY);
                      view.setX(event.getRawX() + dX);
                      lastAction = MotionEvent.ACTION_MOVE;
                      break;
    
                  case MotionEvent.ACTION_UP:
                      if (lastAction == MotionEvent.ACTION_DOWN)
                          //Toast.makeText(getActivity(), "Clicked!", Toast.LENGTH_SHORT).show();
                      break;
                  case MotionEvent.ACTION_BUTTON_PRESS:
                      intent = new Intent(getActivity(), PostActivity1.class);
                      startActivity(intent);
                  default:
                      return false;
              }
              return true;
          }
      });
    

    【讨论】:

    • onLongClickListener 和 onDragListener 怎么样?
    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 2015-12-07
    • 2015-11-08
    • 2021-07-14
    • 2016-07-02
    • 2023-03-15
    • 2015-12-05
    • 2015-07-19
    相关资源
    最近更新 更多