【问题标题】:Select single View drawn on Android canvas选择在 Android 画布上绘制的单个视图
【发布时间】:2024-01-30 04:25:01
【问题描述】:

我是 Android 新手,我发现了很多东西。但现在我很困惑。 我想做一个六边形棋盘游戏,有瓷砖。找了很多图图,最后决定画出我想画的糊状六边形。

我创建了一个从 View 扩展的“Hex”类,添加了一些变量等等。这是我在主要 XML 布局中放置的内容:

<flocoolb.app6.Hex
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    flocoolb:r="50"
    android:id="@+id/h01"/>
<flocoolb.app6.Hex
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    flocoolb:r="50"
    flocoolb:x="75"
    flocoolb:y="43.30127"
    android:id="@+id/h02"/>
<flocoolb.app6.Hex
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    flocoolb:r="50"
    flocoolb:x="150"
    android:id="@+id/h03"/>

r=size, x 和 y 是画布上的偏移量。 这是我的活动: Main activity screen

但现在我想选择单个十六进制。例如,我想选择左上角或右下角。我在它们每个上都添加了 OnClickListener,但实际上视图的大小是整个屏幕。 例如,如果我更改视图的背景颜色,它会在整个屏幕上更改该颜色。是否可以将视图限制为绘制的线条?

我希望你能明白我的意思。 非常感谢:)

【问题讨论】:

  • 我刚刚成功更改了视图的背景颜色。我在 Hex 类中添加了一个方法“changeColor()”来更改颜色、使视图无效并使用 requestLayout()。然后在“OnClickListener”中,我从 View v 中获取 ID,从该 ID 中获取 Hex,并使用前面的方法“changeColor()”。那挺好的!但是现在我的问题在@wngxao 的回答中得到了描述:视图占据了全屏,因此,无论我触摸屏幕,所选视图都是 XML 布局中的最后一个
  • 它可以处理剪裁here?

标签: java android canvas view draw


【解决方案1】:

虽然,我不是很了解你。但我建议你重写你的视图的onTouch方法。并在onTouch方法中实现你的功能。

【讨论】:

  • 每个 Hex 占据整个屏幕。我在我的 XML 中声明了 8 个六边形,即我们在附图中看到的 8 个。随着 OnClickListener 内部颜色的变化,这是我得到的:link 此外,无论我触摸什么十六进制,它都是在前台声明的最后一个。如果我写“v.setVisibility(View.INVISIBLE);”,则在 OnClickListener 内部它们在 XML 布局中从最后一个到第一个都是不可见的。这是我最终想要的:link