【发布时间】:2013-05-19 21:04:32
【问题描述】:
我正试图在我的 gridview 上阻止 Androids drag and drop。我为网格适配器中的每个视图设置了一个 dragListener。当网格不够长而不能滚动时,或者只要网格中的第一个视图可见,它就可以滚动,它可以完美地工作。滚动时,它会将动作向下移动一个位置,但许多视图在顶部不可见,而不是在正确的位置。
GridView 在适配器内部设置 DragListener:
ImageView i = new ImageView;
i.setImageResource(ImageList.get(position));
i.setOnDragListener(new MyDragImageListener(position));
return i;
MyDragListener:
public class MyDragImageListener implements OnDragListener{
int imagePosition;
public MyDragImageListener(int position) {
imagePosition = position;
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
Log.i("DRAG Started", "" + imagePosition);
break;
case DragEvent.ACTION_DRAG_ENTERED:
Log.i("DRAG Entered", "" + imagePosition);
ImageView imageEnter = (ImageView) Grid.getChildAt(imagePosition);
imageEnter.setBackgroundColor(Color.argb(155, 100, 200, 255));
break;
case DragEvent.ACTION_DRAG_EXITED:
Log.i("DRAG Exited", "" + imagePosition);
ImageView imageExit = (ImageView) Grid.getChildAt(imagePosition);
imageExit.setBackgroundColor(Color.argb(0, 0, 0, 0));
break;
case DragEvent.ACTION_DROP:
Log.i("DRAG Dropped", "" + imagePosition);
break;
case DragEvent.ACTION_DRAG_ENDED:
Log.i("DRAG Ended", "" + imagePosition);
default:
break;
}
return true;
}
}
【问题讨论】:
-
您想说 DragEvent 正在返回 screenPosition 并且您期望绝对位置或其他方式?为什么不直接获取滚动位置并将其用作偏移量
-
谢谢我试过这个,它似乎有效。我刚开始使用拖放,并认为这会是一个更复杂的解决方案,但从未想过要尝试。
标签: android drag-and-drop android-gridview