具有拖放功能的 Android 浮动操作按钮

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于具有拖放功能的 Android 浮动操作按钮的主要内容,如果未能解决你的问题,请参考以下文章

pre lollipop 上浮动操作按钮的破碎阴影

如何为可移动的浮动按钮设置 onTouch 和 onClick 功能

在 iOS 中创建浮动操作按钮

Android 浮动按钮和高级 webview 不起作用

使用 Android 设计支持库中的浮动操作按钮的浮动操作菜单实现 [关闭]

关闭浮动操作按钮 Android