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