Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:当我拖动另一张图片时,我如何制作一个图片视图网格,并使图片发生变化?_Java_Android - Fatal编程技术网

Java 安卓:当我拖动另一张图片时,我如何制作一个图片视图网格,并使图片发生变化?

Java 安卓:当我拖动另一张图片时,我如何制作一个图片视图网格,并使图片发生变化?,java,android,Java,Android,我正在尝试创建一个图像视图的网格,当我将另一个视图拖动到这些视图上时(该视图实际上充当鼠标指针),它会将我在网格中拖动的图像更改为另一个图像。当我拖动“鼠标”视图时,它将恢复正常 现在,我移动了鼠标光标视图,并使用自定义适配器(如下图所示)使用网格视图实现了一个图像视图网格 我可以四处拖动光标,但当我尝试在gridview中拖动时,它会调用gridview的ontouch侦听器上的图像(仅当我单击图像视图时,而不是当我在其上滑动时)。我似乎也无法在图像视图中处理图像 此外,如果鼠标视图覆盖其中

我正在尝试创建一个图像视图的网格,当我将另一个视图拖动到这些视图上时(该视图实际上充当鼠标指针),它会将我在网格中拖动的图像更改为另一个图像。当我拖动“鼠标”视图时,它将恢复正常

现在,我移动了鼠标光标视图,并使用自定义适配器(如下图所示)使用网格视图实现了一个图像视图网格

我可以四处拖动光标,但当我尝试在gridview中拖动时,它会调用gridview的ontouch侦听器上的图像(仅当我单击图像视图时,而不是当我在其上滑动时)。我似乎也无法在图像视图中处理图像

此外,如果鼠标视图覆盖其中一个网格图像,则不会调用网格图像视图的
ontouchlistener

实现此功能的最佳方式(视图类型等)是什么

这里是一些相关的代码,从我到目前为止

这是我在活动中设置网格视图的地方

GridView gridView;
gridView = (GridView) findViewById(R.id.gridView);



    gridView.setAdapter(new ImageAdapter(this,new String [25]));
    gridView.setOnDragListener(new MyDragListener());
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {


        }
    });
    gridView.setClickable(false);

您需要创建一个扩展OnDragListener的类: 当输入的操作发生时,您可以将基础图像更改为其他图像。当您存在时(已将视图拖到gridview上图像的边界框之外),您可以将其更改回原始图像

class  MyDragListener implements OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {
        final int action = event.getAction();
        ClipData dragData;
        View p = (View) v.getParent();
        Object index = p.getTag();
        final int which = Integer.parseInt(index.toString());
        boolean handled = true;


        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED: 
                dragSku = event.getClipDescription().getLabel().toString();                 
                break;

            case DragEvent.ACTION_DRAG_ENDED: 

                // Report the drop/no-drop result to the user
                final boolean dropped = event.getResult();
                compareInMotion = false;
                BaseAdapter lva = (BaseAdapter) gridview.getAdapter();
                lva.notifyDataSetChanged();
               break;

            case DragEvent.ACTION_DROP:
                // just drop it
                    ((ImageView) v).setImageBitmap(emptyImg);
                    setUpCompareItem((ImageView) v, dragSku);   break;

            default :
                break;                
        }
        return handled;

所以我实现了我的监听器,并将我的GridView OnDrag监听器设置为它。我没有收到任何拖拉事件。我应该将此侦听器分配给自定义适配器中的每个元素吗?我更新了上面的代码
class  MyDragListener implements OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {
        final int action = event.getAction();
        ClipData dragData;
        View p = (View) v.getParent();
        Object index = p.getTag();
        final int which = Integer.parseInt(index.toString());
        boolean handled = true;


        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED: 
                dragSku = event.getClipDescription().getLabel().toString();                 
                break;

            case DragEvent.ACTION_DRAG_ENDED: 

                // Report the drop/no-drop result to the user
                final boolean dropped = event.getResult();
                compareInMotion = false;
                BaseAdapter lva = (BaseAdapter) gridview.getAdapter();
                lva.notifyDataSetChanged();
               break;

            case DragEvent.ACTION_DROP:
                // just drop it
                    ((ImageView) v).setImageBitmap(emptyImg);
                    setUpCompareItem((ImageView) v, dragSku);   break;

            default :
                break;                
        }
        return handled;