Android绘制多个圆圈没有旧的消失

时间:2014-08-24 02:04:51

标签: java android android-canvas android-view

class MyView extends View
{
Paint dotPaint;
boolean mContextVariable;
List<Point> points = new ArrayList<Point>();
Point p = new Point();
public MyView(Context context) 
{
    super(context);

     dotPaint = new Paint();
     dotPaint.setColor(Color.YELLOW);

}

@Override
protected void onDraw(Canvas canvas)
{
    canvas.drawARGB(100, 100, 100, 255);
    int xCenter = canvas.getWidth()/2;
    int yCenter = canvas.getHeight()/2;
    Functions fc = new Functions();
    MainActivity layout = new MainActivity();
    int coordmax = (fc.countChar(layout, "coordsWalked.pkm", "§") - 1) / 2;
    invalidate();
    int loop = 1;
    while (loop <= coordmax){
        int lat = Integer.parseInt(fc.getDataSplit(layout, "coordsWalked.pkm", ((coordmax*2)-1)))+xCenter;
        int lng = Integer.parseInt(fc.getDataSplit(layout, "coordsWalked.pkm", ((coordmax*2))))+yCenter;
        p.x = lat;
        p.y = lng;
        points.add(p);
        loop++;
    }
    for(Point p: points){
           canvas.drawCircle(p.x, p.y, 10, dotPaint);
           invalidate();
      }
      invalidate();
}

*&#34; coordsWalked.pkm&#34;是一个文本文件,其中有一系列坐标由分割器分隔,因此* 2 - 1是x坐标, 2 - 0是y坐标。不需要太担心,我的所有圆圈都是在正确的坐标上绘制的,因此在正确的位置。

问题是它只在文本文件的最后一个坐标处绘制一个圆圈。我想要的是它为文件中的每一个坐标绘制圆圈并同时显示它们,但它只显示最后一个圆圈。我尝试使用我在网上找到的for(Point p:points)解决方案来解决这个问题,但它仍然和以前完全一样。我也试过调整无效,关闭等等,但没有明显区别。

我已经筛选了大量的答案,但它们都不适合我。他们中的一些人没有工作,因为他们使用不同的方法画出我不理解或不适合我使用的圈子(比如使用surfaceView),而对于其他人我不知道为什么他们不喜欢和#39;工作。我现在的代码部分来自我在网上找到的另一个对我不起作用的答案。

1 个答案:

答案 0 :(得分:0)

我检查了关于不调用invalidate()的答案,并确认调用它确实使之前的图形无效。到现在为止还挺好。这符合您的观察。

但看起来您正在设置自定义视图。之前的讨论提出了答案 - 如果您的真正问题确实是您的onDraw()方法未被调用。这个答案来自链接:

Why onDraw is not called after invalidate()? [来自RGraham的解决方案]

  

您需要拨打setWillNotDraw(false);才能获得   要调用的onDraw方法:

private void init() {
  setWillNotDraw(false);
  ...
}

希望这有帮助!欢呼声,