Android视图:强制onDraw()并等待它完成

时间:2014-01-19 11:52:42

标签: android

我有一个View,并且每次在line数组中存储一个新的line对象时都想更新它。这发生在drawLine()。因此drawYourselfe()应该以某种方式强制onDraw()并等待它完成。这是我的代码的一部分。谁能告诉我drawYourselfe()应该怎么样?

public class MyView extends View{

    private ArrayList<Line> lines;
    private Paint paint; //created in constructor

    protected void drawLine(float[] f)
    {
        if(f.length != 5)
        {

        } else {
            lines.add(new Line(f));
            Log.d("SuM","added Line");
            if(!bufferedDrawing) // in this example bufferedDrawing=false because i want to update the View on every new Line;
            {
                drawYourselfe();
            }

        }
    }

    protected void onDraw(Canvas canvas) {
        Log.d("SuM","onDraw");

        for(Line l : lines)
        {
            l.analysis(); //Logs fromX,toX,fromY,toY and color to console

            paint.setColor(l.getColor());
            canvas.drawLine(l.getFromX(),l.getFromY(),l.getToX(),l.getToY(), paint);

        } 

    }

    public void drawYourselfe()
    {
        //When this is called, onDraw should be called and the Thread should wait till its done;
    }

}  

编辑: 我最好提一下我想做什么以及为什么只是invalidate()不起作用:在我的MainActivity中我调用

myView.drawLine(line1);
myView.drawLine(line2);
myView.drawLine(line3);
//and so on...

我想看看这些线是如何一个接一个地绘制出来的。 在drawYourselfe()中调用invalidate()时,我只看到绘制的所有行,但不是一个接一个。我知道这些树线绘制得如此之快以至于我看不到它们一个接一个地绘制,但在应用程序中我用数千行来做它。

3 个答案:

答案 0 :(得分:0)

添加新行时请调用invalidate()函数。 invalidate将调用onDraw函数

答案 1 :(得分:0)

调用View.invalidate()强制View重绘它的内容,因为这里只有一个Thread,它将等到绘图完成,即下一条指令将不会执行,直到{ {1}}已完成......

答案 2 :(得分:0)

调用invalidate(),但无法等待绘制完成。在drawLine调用返回后,将在稍后调用draw。