android – DragEvent.ACTION_ Drop will never be called

I tried to use image drag on my Android application. My problem is that dragevent.action will never be called when I stop dragging my image_ DROP.

In my diary, I received this call:

01-30 13:50:25.003: I/ViewRootImpl(2198): Reporting drop result: false

Thanks for your help.

This is my code:

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);

    }

}

My 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>

resolvent:

You must have something to put down that image. So far, you only have one ondraglistener on the image. The location where you want to delete the image does not contain any controls of ondraglistener, so your listener will not be called

The control listening to ondraglisteners cannot be hidden or disappeared, so you must place some grids there, where the cells look empty but not. For example, ImageView with transparent image. Or set alpha to 0f

At least set ondraglistener to internal LinearLayout, and then you will get the drop event

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>