如何交换两个圆圈

How to swap two circles

我在 class 中的 Canvas 上画了 36 个圆圈,它是从视图 class 扩展而来的。

我想了解的是,我怎样才能像 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

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

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