4

我的应用程序使用 gridview 来显示一些项目,我希望在该 gridview 中进行一些拖放。基本上用户可以选择一个项目并将其移动到不同的位置。这并不难实现,但我偶然发现了一个小问题。当该点位于两个网格单元之间时pointToPosition返回。这是可以理解的,但并没有真正的帮助——在我的情况下,我向用户展示了当他拖动东西时的顺序预览,当他拖动间距时,我突然不知道我应该显示什么.INVALID_POSITION

一种解决方案是实际删除间距。但我仍然想要瓷砖之间的一些视觉间距。

有可能我错过了一些计算最接近给定位置的瓷砖的方法。

让gridview在元素之间具有“仅视觉”间距的最佳方式是什么?

我当前(临时?最终?)的解决方案是根本不使用背景并将它们直接绘制到 gridview 背景中。不过,这似乎不是一个好主意。

4

2 回答 2

2

这就是我最后要使用的:spacing = 0 和 layer-list drawable 包含带有圆角的 shapedrawable。另一个这样的可绘制对象用作网格视图的选择器:

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);创建网格列表视图时

于 2013-02-18T22:02:33.273 回答
1

我想你已经得到了答案。从 中删除任何间距GridView并在每个ImageViews 中设置填充以保持您想要的外观,但实际上在单元格之间没有任何间距。您说您必须覆盖onMeasure(),我不确定您为什么必须按照上面所说的那样做。只需将ImageView宽度设置为与GridView单元格相同,然后设置height=width,您可能希望将 的缩放设置ImageViewcenterInside

于 2013-02-18T17:59:01.830 回答