GridView带有间距的pointToPosition

时间:2012-12-29 03:20:26

标签: android layout gridview

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

一种解决方案是实际去除间距。但我仍然希望瓷砖之间有一些视觉间距。

我有可能错过某种方法来计算最接近给定位置的瓦片。

使用gridview与元素之间的“仅视觉”间距的最佳方法是什么?

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

2 个答案:

答案 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 }}