要在Android中拖动一个图片,你可以使用Drag and Drop框架。以下是一个简单的示例代码,可以让你拖动一个图片视图:
1. 创建一个新的`drag_and_drop.xml`布局文件,将以下代码复制到文件中:
```xml
android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:src="@drawable/image" android:layout_centerInParent="true" android:contentDescription="Drag Image"/>
```
2. 在你的`MainActivity.java`文件中,将以下代码复制到文件中:
```java
import android.content.ClipData;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drag_and_drop);
imageView = findViewById(R.id.imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ClipData clipData = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDragAndDrop(clipData, shadowBuilder, v, 0);
return true;
} else {
return false;
}
}
});
imageView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
// 拖动进入ImageView时的操作
break;
case DragEvent.ACTION_DRAG_EXITED:
// 拖动离开ImageView时的操作
break;
case DragEvent.ACTION_DROP:
// 图片被放下时的操作
ViewGroup owner = (ViewGroup) v.getParent();
owner.removeView(v);
ViewGroup container = (ViewGroup) event.getLocalState();
container.addView(v);
v.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
v.setVisibility(View.VISIBLE);
break;
}
return true;
}
});
}
}
```
请确保将`@drawable/image`替换为你要使用的图片资源的名称。当你运行此代码时,你将能够长按并拖动图片视图。当你将图片放下时,它将从一个容器移动到另一个容器。