【问题标题】:GridView pointToPosition with spacingGridView pointToPosition 带间距
【发布时间】:2012-12-29 03:20:25
【问题描述】:

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

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

我有可能错过了计算最接近给定位置的图块的方法。

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

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

【问题讨论】:

  • 你不能把GridView中的空格去掉,直接添加到它的单元格视图中吗?
  • 单元格视图是简单的 ImageViews。我试图避免使用比这更复杂的东西。
  • 您是否尝试为ImageViews 自己添加一些填充并删除GridView 的间距?
  • 我还需要使我的 ImageViews 成为正方形(gridview 设置宽度,我设置为使用相同的宽度),所以我必须覆盖 onMeasure。这可能是设置填充不起作用的原因 - 背景被拉伸到全视图。

标签: android layout gridview


【解决方案1】:

这就是我最后要使用的: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); 用于创建网格列表视图

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果只设置padding,背景仍然会被拉伸到全尺寸。
    • 你所说的背景是什么?图片背景还是GridView 背景?我建议将GridView 背景设置为纯色(或将其保留为默认值)。可以截图吗?
    • 我认为您只需要使用缩放选项(用于 ImageView)即可找到适合您的选项,以防止拉伸——您尝试centerInside了吗?
    • 只控制图片,不控制ImageView的背景。不过,我可能会尝试在我的背景可绘制对象中内置填充。
    猜你喜欢
    • 2017-03-20
    • 2019-10-07
    • 2012-07-21
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多