我的应用程序使用gridview来显示一些项目,我想在该gridview中进行一些拖放操作。基本上用户可以选择一个项目并将其移动到不同的位置。这并不难实现,但我偶然发现了一个小问题。当 两个网格单元格之间的点为时,pointToPosition
返回INVALID_POSITION
。这是可以理解的,但并没有真正的帮助 - 在我的情况下,我正在向用户展示订单将会是什么,因为他拖动周围的东西,当他拖过间距我突然不知道我应该显示什么
一种解决方案是实际去除间距。但我仍然希望瓷砖之间有一些视觉间距。
我有可能错过某种方法来计算最接近给定位置的瓦片。
使用gridview与元素之间的“仅视觉”间距的最佳方法是什么?
我目前的(临时?最终?)解决方案根本不使用背景并将它们直接绘制到gridview背景中。但这似乎不是一个好主意。
答案 0 :(得分:2)
这就是我最后要使用的内容:spacing = 0和包含带圆角的shapedrawable的layer-list drawable。另一个这样的drawable用作网格视图的选择器:
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);
答案 1 :(得分:1)
我想你已经得到了答案。从GridView
中删除任何间距,并在每个ImageView
中设置填充以保持所需的外观,但实际上在单元格之间没有任何间距。你说你必须覆盖onMeasure()
,我不确定你为什么要从你上面所说的那样做。只需将ImageView
的宽度设置为与GridView
单元格相同,然后设置height=width
,您可能需要将ImageView
的缩放比例设置为{{1 }}