使用图像拖放

时间:2016-02-02 20:33:14

标签: java android

我在android studio上有这个拖放功能,它可以使用图像视图。一旦我使用OnLongListener选择图像视图并将其放到作为目标的空白图像视图中,目标图像视图应该更改为我抓取的图像视图。

我的代码

img6.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            DragShadow dragshadow = new DragShadow(v);
            ClipData data = ClipData.newPlainText("", "");
            v.startDrag(data, dragshadow, v, 0);
            return false;
        }
    });

    droptarget.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            int dragEvent = event.getAction();
            int ImageViewID = v.getId();
            switch (dragEvent) {

                case DragEvent.ACTION_DRAG_ENTERED:
                    break;

                case DragEvent.ACTION_DRAG_EXITED:
                    break;

                case DragEvent.ACTION_DROP:
                    droptarget.setImageResource(ImageViewID);
                    break;
            }
            return true;
        }
    });

setImageResource出现错误。

2 个答案:

答案 0 :(得分:0)

setImageResource将drawable设置为ImageView的内容。但是你试图将视图的id传递给它

int ImageViewID = v.getId(); 
droptarget.setImageResource(ImageViewID);

相反,你可以尝试一下:

ImageView imageView = (ImageView)v;
droptarget.setImageResource(imageView.getDrawable());

答案 1 :(得分:0)

您可以在拖动视图的ClipData中发送Drawable代码(int)(例如R.id.some_image_view的int值)。然后使用该代码检索Dropped-on-View的正确Drawable。

droptarget.setImageDrawable(getResources().getDrawable(Integer.parseInt(code)));

然后强制重绘:

droptarget.invalidate();

这确实要求您使用自己的自定义监听器覆盖OnLongClick监听器。