java - 如何交换两个圆

标签 java android android-canvas android-view

我在我的类中的 Canvas 上画了 36 个圆圈,该类是从 View 类扩展的。

我想了解的是,如何更改它们之间的位置,就像 Play 商店中的“两点”游戏一样。

我怎样才能做到这一点?

这是我的 onDraw 方法代码:

@Override
protected void onDraw (Canvas canvas){
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    int xArt = 0, yArt = 0, x, y;
    x = getWidth() / 4 - 50;
    y = getHeight() / 2 - 50;

    canvas.drawARGB(96, 25, 139, 10);
    for (int i = 1; i < 37; i++) {
        canvas.drawCircle(x + xArt, y + yArt, 30, paint.get(i));

        yArt += 100;
        if (i % 6 == 0) {
            xArt += 100;
            yArt = 0;
        }
    }

}


这是图片:tinypic.com/r/20a9m4j/9 The picture

最佳答案

您在自定义View 中绘制了 36 个圆圈,而您只想交换其中两个?有可能的。只需将圆的 x 和 y 坐标 (x + xArt, y + yArt) 存储在 ArrayList 中即可。您稍后可以使用它来交换圆圈。但这里交换就意味着需要重新绘制所有36个圆。这就是自定义 View 的问题,即使你做了微小的改变,你也需要重绘整个 View 。

就你而言,我认为这是昂贵且不必要的。相反,您需要做的是编写自定义 ViewGroup 或使用任何布局(如果足够的话)。将您的Circles 作为子项添加到ViewGroup 中。现在您可以简单地使用 getChild 并交换它们。这不需要您重新绘制所有 36 个圆圈。

关于java - 如何交换两个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599398/

相关文章:

java - 如何在不使用Thread.sleep的情况下在java中执行定期检查?

java - 我们知道我们不能创建接口(interface)对象,但是我们如何在jdbc中创建Statement或PrepareStatement对象呢?

java - 即使条件为真也无法进入 while 循环

android - 使用 ListAdapter/SQLite 数据库的初学者

android - 如何从android中的表中获取单个列

Canvas 上的 Android 文本

java - 如何以编程方式连续绘制多个矩形?

java - 二维数组排序

android - 如何打开启动器的小部件选择器?

android - 在android中绘制一个带边框的填充矩形