Java 在特定位置的空白屏幕上生成小实心圆的最佳方法?

Java 在特定位置的空白屏幕上生成小实心圆的最佳方法?,java,android,android-layout,android-fragments,Java,Android,Android Layout,Android Fragments,-->在一段时间内将绘制多个圆圈,但一次屏幕上只显示一个圆圈。 -->当程序注册点击时,用户将点击圆圈,它将显示下一个圆圈。 -->每个圆的位置是已知的,只有它们在不同的执行时随机出现 我曾经考虑过一个线性布局,里面有很多imageview(其中30个),每个imageview都有相同的源,一个小的红点,生成并存储在res/drawable文件夹中。dot的代码为: <layer-list xmlns:android="http://schemas.android.com/apk/res/

-->在一段时间内将绘制多个圆圈,但一次屏幕上只显示一个圆圈。 -->当程序注册点击时,用户将点击圆圈,它将显示下一个圆圈。 -->每个圆的位置是已知的,只有它们在不同的执行时随机出现

我曾经考虑过一个线性布局,里面有很多imageview(其中30个),每个imageview都有相同的源,一个小的红点,生成并存储在res/drawable文件夹中。dot的代码为:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Large red circle -->
    <item>
        <shape
            android:shape="oval">
            <stroke
                android:width="0dp"
                android:color="#000000" />
            <solid android:color="#FF0000" />
            <size
                android:width="30dp"
                android:height="30dp"/>
        </shape>
    </item>


我正在考虑在这些图像视图上使用
isVisible()
在不同的时间隐藏和显示它们。这对我来说似乎不是很有效。有什么建议吗?

实现这一点的最佳方法是创建一个覆盖了
onDraw
的单个自定义
视图

然后,在
onDraw
中,您可以在
画布
对象上绘制任意多个圆。StackOverflow上有数千个线程描述了如何做到这一点。例如

请记住,您必须在
视图上调用
setWillNotDraw(false)
,以执行自定义
onDraw


当用户单击圆圈时,只需记录该偶数并调用
invalidate()
onDraw
将再次被调用,您可以为更新的状态绘制适当数量的圆圈。

谢谢您的回答,我将尝试:)您能告诉我使用“Canvas”对象而不是大量imageview可以提高性能吗?这是一个主要的改进。您使用的是一个相对较轻的自定义视图,而不是大量的
imageview
。这将是更轻的设备。此外,您还可以在一个地方轻松计算圆的坐标。在某些布局中插入新的
视图
,并确保正确添加这些视图将是一件痛苦的事情。我正在使用canvas.drawCircle获取这些圆。但是我怎么知道我的圆圈被点击了呢?这个“canvas.drawCircle”返回一个空值,所以实际上我没有任何对象来添加监听方法。知道如何注册用户点击吗?在TouchListener上添加一个
OnTouchListener
,它使用
GestureDetector
来检测点击。根据
MotionEvent
与action
MotionEvent.action\u DOWN
的坐标,您可以确定单击是否在特定的圆边界内。是否有任何特殊功能用于查找“action MotionEvent.action\u DOWN您可以确定单击是否在特定的圆边界内。”?或者我只是在IF语句中进行比较?如点.x>250和点.x