
我试图在我的Android应用程序上使用图像拖动.
我的问题是当我停止拖动我的图像时,永远不会调用DragEvent.ACTION_DROP.
在我的日志猫中,我接到了这个电话:
01-30 13:50:25.003: I/VIEwRootImpl(2198): Reporting drop result: false谢谢你的帮助.
这是我的代码:
public class buildImage extends Activity implements OntouchListener, OnDragListener{ private linearLayout slIDer; private relativeLayout board; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { this.requestwindowFeature(Window.FEATURE_NO_Title); super.onCreate(savedInstanceState); setContentVIEw(R.layout.build_image); //drawing = (Signatureviewmoded) findVIEwByID(R.ID.myTest); slIDer = (linearLayout) findVIEwByID(R.ID.imageSlIDer); board = (relativeLayout) findVIEwByID(R.ID.borad); setimagesSlIDer(); } public voID setimagesSlIDer() { ImageVIEw image = new ImageVIEw(this); image.setLayoutParams(new linearLayout.LayoutParams(100, 100)); Drawable draw = getResources().getDrawable(R.drawable.images); image.setimageDrawable(draw); image.setonDragListener(this); image.setontouchListener(this); slIDer.addVIEw(image); } @OverrIDe public boolean ontouch(VIEw vIEw, MotionEvent event) { // Todo auto-generated method stub if (event.getAction() == MotionEvent.ACTION_DOWN) { ClipData data = ClipData.newPlainText("tests", "test"); DragShadowBuilder shadowBuilder = new VIEw.DragShadowBuilder(vIEw); vIEw.startDrag(data, shadowBuilder, vIEw, 0); //vIEw.setVisibility(VIEw.INVISIBLE); return true; } else { return false; } } @OverrIDe public boolean onDrag(VIEw v, DragEvent event) { // Todo auto-generated method stub int action = event.getAction(); switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: { Log.i("check6", "check6"); // do nothing return true; } case DragEvent.ACTION_DRAG_ENTERED: { Log.i("check4", "check4"); //v.setBackgroundDrawable(enterShape); return true; } case DragEvent.ACTION_DRAG_EXITED: { // v.setBackgroundDrawable(normalShape); Log.i("check3", "check3"); return true; } case DragEvent.ACTION_DROP: // Dropped, reassign VIEw to VIEwGroup Log.i("check", "check"); addNewImage(event); return true; case DragEvent.ACTION_DRAG_ENDED: { Log.i("check2", "check2"); // addNewImage(event); return true; } default: break; } return true; } public voID addNewImage(DragEvent event) { ImageVIEw image = new ImageVIEw(this); image.setLayoutParams(new linearLayout.LayoutParams(100, 100)); Drawable draw = getResources().getDrawable(R.drawable.images); image.setimageDrawable(draw); board.addVIEw(image); float x = event.getX(); float y = event.getY(); image.setX(x); image.setY(y); Log.i("margin", "x " + x + " y " + y); }}我的XML
<?xml version="1.0" enCoding="utf-8"?> <relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" > <relativeLayout androID:layout_wIDth="fill_parent" androID:ID="@+ID/borad" androID:background="@androID:color/darker_gray" androID:layout_above="@+ID/temp" androID:layout_height="fill_parent" > </relativeLayout> <ScrollVIEw androID:layout_wIDth="fill_parent" androID:ID="@+ID/temp" androID:layout_alignParentBottom="true" androID:layout_height="wrap_content" > <linearLayout androID:ID="@+ID/imageSlIDer" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:orIEntation="horizontal" > </linearLayout> </ScrollVIEw> </relativeLayout>解决方法:
你必须有东西放下那个图像.到目前为止,您只在图像上有一个OnDragListener.要删除该图像的位置不包含OnDragListener的任何控件,因此不会调用您的Listener.
听取OnDragListeners的控件不能被隐藏或消失,所以你必须在那里放置一些网格,其中单元格看起来是空的但不是.例如,具有透明图像的ImageVIEw.或者将Alpha设置为0f.
至少将OnDragListener设置为内部linearLayout,然后您将获得Drop事件.
总结以上是内存溢出为你收集整理的android – DragEvent.ACTION_DROP永远不会被调用全部内容,希望文章能够帮你解决android – DragEvent.ACTION_DROP永远不会被调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)