DragandDrop.java
import android.os.Bundle;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.app.Activity;
public class DragandDrop extends Activity implements OnTouchListener, OnDragListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.draganddrop);
findViewById(R.id.squareImage).setOnTouchListener(this);
findViewById(R.id.circleImage).setOnTouchListener(this);
findViewById(R.id.triangleImage).setOnTouchListener(this);
findViewById(R.id.top_container).setOnDragListener(this);
findViewById(R.id.bottom_container).setOnDragListener(this);
findViewById(R.id.squareImage1).setOnDragListener(this);
findViewById(R.id.circleImage1).setOnDragListener(this);
findViewById(R.id.triangleImage1).setOnDragListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, v, 0);
v.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction()==DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
LinearLayout to = (LinearLayout) v;
to.addView(view);
view.setVisibility(View.VISIBLE);
}
return true;
}
}
draganddrop.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".draganddrop"
android:background="@drawable/dragshapes"
android:orientation="vertical"
android:id="@+id/dropLayout">
<LinearLayout
android:id="@+id/top_container"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:contentDescription="@string/square_text_content"
android:id="@+id/squareImage1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragsquare1" />
<ImageView
android:contentDescription="@string/circle_text_content"
android:id="@+id/circleImage1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragcircle1" />
<ImageView
android:contentDescription="@string/triangle_text_content"
android:id="@+id/triangleImage1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragtriangle1" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_container"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:contentDescription="@string/square_text_content"
android:id="@+id/squareImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragsquare" />
<ImageView
android:contentDescription="@string/circle_text_content"
android:id="@+id/circleImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragcircle" />
<ImageView
android:contentDescription="@string/triangle_text_content"
android:id="@+id/triangleImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:src="@drawable/dragtriangle" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:3)
删除容器的设置拖动侦听器
findViewById(R.id.top_container).setOnDragListener(this);//remove this
findViewById(R.id.bottom_container).setOnDragListener(this);//remove this
检查拖动的图像视图是否与您删除的视图匹配。如果它们匹配,则将删除的图像视图的背景设置为拖动的背景。(其他尺寸与您的xml文件相同) 示例代码 -
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction()==DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
if(view.getId()==R.id.squareImage1 && v.getId()==R.id.squareImage)
{
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
v.setBackground(@drawable/dragsquare1);//TODO: change this pseudo code.
return true;
} else if(view.getId()==R.id.circleImage1 && v.getId()==R.id.circleImage){
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
v.setBackground(@drawable/dragcircle1);//TODO: change this pseudo code.
return true;
} else if(view.getId()==R.id.triangleImage1 && v.getId()==R.id.triangleImage){
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
v.setBackground(@drawable/dragtriangle1);//TODO: change this pseudo code.
return true;
} else {
return false;
}
}
}
希望这可以帮助你...圣诞节