android–DragEvent.ACTION_DROP永远不会被调用

android–DragEvent.ACTION_DROP永远不会被调用,第1张

概述我试图在我的Android应用程序上使用图像拖动.我的问题是当我停止拖动我的图像时,永远不会调用DragEvent.ACTION_DROP.在我的日志猫中,我接到了这个电话:01-3013:50:25.003:I/ViewRootImpl(2198):Reportingdropresult:false谢谢你的帮助.这是我的代码:publicclassbui

我试图在我的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永远不会被调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1119063.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存