我的应用程序使用 gridview 来显示一些项目,我想在该 gridview 中进行一些拖放操作。基本上用户可以选择一个项目并将其移动到不同的位置。这并不难实现,但我偶然发现了一个小问题。当点位于两个网格单元格之间 时,pointToPosition
返回INVALID_POSITION
。这是可以理解的,但并没有真正的帮助——在我的例子中,我向用户展示了他四处拖动东西时的顺序预览,当他在间距上拖动时,我突然不知道我应该显示什么.
一种解决方案是实际删除间距。但我仍然希望瓷砖之间有一些视觉间距。
我有可能遗漏了一些计算最接近给定位置的图 block 的方法。
让 gridview 在元素之间具有“仅视觉”间距的最佳方式是什么?
我当前的(临时的?最终的?)解决方案是根本不使用背景并将它们直接绘制到 gridview 背景中。但这似乎不是个好主意。
最佳答案
这就是我最后要使用的:spacing = 0 和包含带圆角的 shapedrawable 的图层列表可绘制对象。另一个这样的可绘制对象用作 GridView 的选择器:
padded_border_normal.xml:
<item android:left="3dp"
android:right="3dp"
android:top="3dp"
android:bottom="3dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<stroke android:color="#8033b5e5" android:width="@dimen/border_width"/>
<corners android:radius="7dp"/>
<size android:height="60dp" android:width="60dp" />
</shape>
</item>
padded_border_pressed.xml:
<item android:left="3dp"
android:right="3dp"
android:top="3dp"
android:bottom="3dp">
<shape android:shape="rectangle">
<solid android:color="#6033b5e5" />
<stroke android:color="#8033b5e5" android:width="@dimen/border_width"/>
<corners android:radius="7dp"/>
<size android:height="60dp" android:width="60dp" />
</shape>
</item>
grid.setSelector(R.drawable.padded_border_pressed);
创建网格时 result.setBackgroundResource(R.drawable.padded_border_normal);
创建网格 ListView 时
关于android - 带间距的 GridView pointToPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078416/