【问题标题】:What options are there for arranging custom ImageViews有哪些选项可用于安排自定义 ImageView
【发布时间】:2013-10-06 14:32:20
【问题描述】:

我最近完成了simple drag and drop shapes game。它让用户将一个形状 (ImageView) 拖到另一个“空占位符”ImageView

我现在想让这个更高级一点,而不是拖动一个简单的形状,我想制作一个由各种非正交形状组成的拼图,例如将一个圆分成 5 个不同的部分。我现在遇到的问题是如何设计布局。我不知道如何制作一个真正“定制”形状的ImageView,据我从研究中发现这是不可能的。所以我现在的想法是重叠一些正方形ImageViews,每个正方形只有一个图像的子集,其余的都是透明的。因此,最终输出看起来像是一些自定义形状的ImageViews。

例子:

+ + +

因为只有内部部分是“可见的”,而圆圈的其余部分是透明的,所以当所有这些部分都放在屏幕上的同一位置时,最终图像将如下所示:

我还没有尝试过……但我预见到至少有一个问题。当我将这些碎片拖到这个拼图上时,它们都会在拖到同一个地方时“卡入”到位。因为实际上我在这里真正拥有的只是ImageView 内的一个圆圈的图片,该圆圈周围有一些不可见的矩形边界。

希望这种情况是清楚的。现在我的问题:

  1. 是否可以使用真正自定义形状的ImageViews 来代替我重叠图像的想法?
  2. 如果我认为是处理这个拼图创意的最佳方式,那么可以更改哪些属性以使所有这些拼图的“掉落”动作不会发生在同一位置?如果我想“放下”披萨形状的块,我希望它仅在靠近圆圈左上角时卡入到位。

注意:我是 Android 编程新手,对 Java/XML 也有些陌生,非常很可能我忽略了一些东西,所以请随意提出您认为合适的其他方法.

【问题讨论】:

标签: android android-layout layout imageview


【解决方案1】:
  1. 并非如此。重叠视图通常是它的完成方式。您也可以使用一个视图并自己覆盖绘图操作(在视图内的相对位置绘制多个位图),但这会使拖放方面变得更加困难。

  2. 如果视图的大小都相同,并且每个视图中的可见部分都处于正确的相对位置,则它们应该正确地对齐在一起。这是因为快照(我相信)基于视图左上角的位置。如果披萨形状的部分的可见部分在这方面是正确的,它应该在正确的位置卡入。

【讨论】:

  • 1.这让我很难过,但我是这么想的。 2.为了澄清起见,我是说如果我拿“披萨”形状的一块,将它拖到圆圈上并“放下”在可见圆圈的右下角,它可能会“卡入”正确的左上角位置(因为实际上我正在将一个不可见的ImageView 方块拖到另一个上)。我怀疑这就是它的工作方式。但我只希望这件作品在它进一步下降到它所属的左上角时卡入。这有意义吗?
  • 我不清楚你是如何处理捕捉的。我假设您只是检查“当前”和“正确”位置之间的距离,相对于每个图像视图的左上角。这样,您就可以设置任何您想要的阈值。
  • 也许我应该提供代码......但我有一个由OnDragListener 类提供的onDrag 方法,我所有的“空”放置目标都注册了它。它现在所做的是在getAction()of ACTION_DROP 上,它将放置“目标”的ImageView 设置为拖动的ImageView 的图像。基本上我设置了ImageView dropped = (ImageView) dragedView。因此,在使用hander 捕捉它之前,我没有检查任何边界。检查 where 东西被丢弃的属性是什么?只需检查dragedView.X 是否在某个dropped.X 范围内?
  • 你也可以在收到ACTION_DROP信号时使用DragEvent#getX()getY()。我不确定被拖动的视图的位置是否在被拖动时更新。
【解决方案2】:

所以你有一些地方想要接受掉落物,我假设你知道它们的坐标,比如(d_x,d_y)

那么为什么不简单地监视您正在拖动的块的图像视图的中心(p_x,p_y) 的坐标,比如说“披萨”块,并且当块和放置点之间的距离在可接受的范围内时接受滴。


但如果您问是否有某种方法可以制作非矩形图像视图,我认为这是不可能的。

但是我认为在您的情况下没有必要,因为我相信即使您希望他们将块精确地拖动到位,您也可以根据形状的知识计算可拖动矩形需要去的坐标片和矩形包裹片的假设。

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多