[英]Getting an unexpected error when I try to run my Android app with drag and drop
我正在尝试制作一个非常简单的Android应用程序(使用Eclipse和Android 4.0.2,API 15),实现拖放功能。 它具有一个ImageView,需要将其拖放到其他ImageView上。 但是我似乎有某种问题。 该应用程序可以正确编译,但是当我在模拟器和真实设备上运行该应用程序时,我无法关闭它。 我的代码有3个类:一个用于(仅)Activity,一个用于“可拖动”图像侦听器,以及一个用于“目标”图像侦听器:
活动:
public class MainActivity extends Activity {
ImageView imageToBeDragged = (ImageView)findViewById(R.id.imagetodrag);
ImageView targetImage = (ImageView)findViewById(R.id.target);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageToBeDragged.setOnTouchListener(new ChoiceTouchListener());
targetImage.setOnDragListener(new ChoiceDragListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
可拖动的侦听器:
public final class ChoiceTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
//start dragging the item touched
view.startDrag(data, shadowBuilder, view, 0);
return true;
}
else {
return false;
}
}
}
目标听众:
public class ChoiceDragListener implements OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_ENTERED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_EXITED:
//no action necessary
break;
case DragEvent.ACTION_DROP:
//handle the dragged view being dropped over a target view
View view = (View) event.getLocalState();
//stop displaying the view where it was before it was dragged
view.setVisibility(View.INVISIBLE);
//view dragged item is being dropped on
ImageView dropTarget = (ImageView) v;
//view being dragged and dropped
ImageView dropped = (ImageView) view;
//Dim the target image when the other ImageView is dropped on it
dropTarget.setAlpha(100);
break;
case DragEvent.ACTION_DRAG_ENDED:
//no action necessary
break;
default:
break;
}
return true;
}
}
是什么导致错误?
谢谢!
在黑暗中进行拍摄而看不到错误,但您的活动看起来有问题。 在设置内容视图之前,无法通过其ID查找视图。
public class MainActivity extends Activity {
ImageView imageToBeDragged;
ImageView targetImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageToBeDragged = (ImageView)findViewById(R.id.imagetodrag);
targetImage = (ImageView)findViewById(R.id.target);
imageToBeDragged.setOnTouchListener(new ChoiceTouchListener());
targetImage.setOnDragListener(new ChoiceDragListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.