linearlayout控件无法这样设置拖动吗,监测不到ACTION_MOVE
时间: 2023-08-21 18:03:49 浏览: 175
可拖动的控件
对不起,我之前的回答有误。LinearLayout 控件确实不能直接处理触摸事件和拖动操作。要实现可拖动的效果,你可以将 LinearLayout 包装在一个可拖动的 ViewGroup(例如 FrameLayout 或 RelativeLayout)中。
以下是一种实现可拖动控件的方法:
1. 在 XML 布局文件中,使用一个可拖动的 ViewGroup(例如 FrameLayout)包装 LinearLayout 控件,如下所示:
```xml
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dragLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 在这里放置你的控件 -->
</LinearLayout>
</FrameLayout>
```
2. 在你的活动或片段中,获取对 LinearLayout 的引用,并设置触摸监听器:
```java
LinearLayout myView = findViewById(R.id.myView);
myView.setOnTouchListener(new View.OnTouchListener() {
private float lastX, lastY;
private int deltaX, deltaY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
deltaX = (int) (event.getX() - lastX);
deltaY = (int) (event.getY() - lastY);
int newX = (int) (v.getX() + deltaX);
int newY = (int) (v.getY() + deltaY);
v.setX(newX);
v.setY(newY);
break;
}
return true;
}
});
```
这样,你就可以通过触摸和拖动 LinearLayout 的包装容器来实现控件的移动。
再次对之前的错误回答表示抱歉,希望这次的回答能够帮到你。如果还有其他问题,请随时提问。
阅读全文