Android - Movable/Draggable Floating Action Button (FAB)

后端 未结 9 1642
温柔的废话
温柔的废话 2020-12-28 14:47

I am using a FloatingActionButton in my app. Occasionally, it overlaps essential content, so I would like to make it so the user can drag the FAB out of the way.

No

9条回答
  •  情话喂你
    2020-12-28 15:33

    Try this:

    public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
      float dX;
      float dY;
      int lastAction;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        final View dragView = findViewById(R.id.draggable_view);
        dragView.setOnTouchListener(this);
      }
    
      @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(DraggableView.this, "Clicked!", Toast.LENGTH_SHORT).show();
            break;
    
          default:
            return false;
        }
        return true;
      }
    }
    

    And the XML:

    
    

    You can make any View Draggable and Clickable.

提交回复
热议问题