【问题标题】:Android OnTouch events numerous ObjectsAndroid OnTouch 事件众多对象
【发布时间】:2011-09-28 12:52:12
【问题描述】:

好的,我正在玩扩展视图的 ontouch 事件。

我所做的是在触摸时画一个圆圈.. 当你移动时,圆圈会跟随。当您移动时,会形成另一个圆圈,并将坐在减小半径的位置,直到它消失......(现在最多 10 个圆圈)。我还可以同时处理多个手指触摸。这就是问题所在。代码很糟糕!

创建多个圆圈这是我的绘画方法:

public void onDraw(Canvas canvas)
    {
        paint.setColor(Color.RED);                
        paint.setStyle(Style.STROKE); 
        paint.setStrokeWidth(stroke);
        canvas.drawCircle(x,y,radius,paint);
        canvas.drawCircle(x1,y1,radius1,paint);
        canvas.drawCircle(x2,y2,radius2,paint);
        canvas.drawCircle(x3,y3,radius3,paint);
        canvas.drawCircle(x4,y4,radius4,paint);
        canvas.drawCircle(x5,y5,radius5,paint);
        canvas.drawCircle(x6,y6,radius6,paint);

        paint.setColor(Color.BLUE);
        canvas.drawCircle(x7,y7,radius7,paint);
        canvas.drawCircle(x8,y8,radius8,paint);

        paint.setColor(Color.YELLOW);
        canvas.drawCircle(x9,y9,radius9,paint);
        canvas.drawCircle(x10,y10,radius10,paint);
    }

所以你可以看到这到目前为止效率很低,并且会产生一些很长的讨厌的代码。部分问题是我只能在 Ontouch 中更改坐标。并且无效。任何人都知道我可以更有效地做到这一点的方法(在更面向对象的类型方法中)。

【问题讨论】:

  • 你应该将 x, y 存储在一个 Arraylist 中,并在点内迭代 arraylist 对象以绘制点

标签: android graphics multi-touch touch-event ontouchlistener


【解决方案1】:

首先要做的是,从这个开始:

public class Circle {
    public int x;
    public int y;
    public double radius;
    public Paint paint;

    /* constructors, getters & setters if you feel like ...*/

}

把你所有的圈子放在一个

ArrayList<Circle> circles = new ArrayList();


public void onDraw(Canvas canvas)
{
    /*...*/
    Iterator iterator = circles.iterator();
    while(iterator.hasNext()) {
        drawCircle(iterator.next());
    }
}

public void drawCircle(Canvas canvas, Circle circle) {
    canvas.drawCircle(circle.x, circle.y, circle.raidus, circle.paint);
}

【讨论】:

  • 实际上我认为这会起作用..当我这样做并创建 10 个左右的圆圈时..我开始想要构建一个粒子系统(尽管不确定使用 View/Paint 与 OpenGL 的性能)。所以我试图找到一种有效的方法来创建 1000 多个对象(粒子)。我想我会试一试,看看会发生什么,现在只是用圆圈。谢谢..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多