我在我的应用程序中使用 FloatingActionButton 。有时,它会与基本内容重叠,所以我想这样做,以便用户可以将 FAB 拖到一边。
本身不需要拖放功能。它只需要是可移动的。文档没有提到这一点,但我确信我在其他应用程序中看到过这样的功能。
您能建议/提供有关如何执行此操作的代码片段(最好是 XML 格式)。
原文由 ban-geoengineering 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在我的应用程序中使用 FloatingActionButton 。有时,它会与基本内容重叠,所以我想这样做,以便用户可以将 FAB 拖到一边。
本身不需要拖放功能。它只需要是可移动的。文档没有提到这一点,但我确信我在其他应用程序中看到过这样的功能。
您能建议/提供有关如何执行此操作的代码片段(最好是 XML 格式)。
原文由 ban-geoengineering 发布,翻译遵循 CC BY-SA 4.0 许可协议
试试这个:
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;
}
}
和 XML:
<ImageButton
android:id="@+id/draggable_view"
android:background="@mipmap/ic_launcher"
android:layout_gravity="bottom|right"
android:layout_marginBottom="20dp"
android:layout_marginEnd="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
您可以使任何视图可拖动和可点击。
原文由 Akanshi Srivastava 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答947 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答826 阅读✓ 已解决
2 回答939 阅读
2 回答878 阅读
1 回答811 阅读
1 回答860 阅读
基于 this answer for another SO question 这是我创建的代码。它似乎工作得很好(具有工作点击功能)并且不依赖于 FAB 的父布局或定位……
这是 XML…
基本上,您只需要在 XML 中将
android.support.design.widget.FloatingActionButton
com.example.MovableFloatingActionButton
。