0

在适用于 Android 的 Eclipse IDE 中,我现在正在解决一个简单的问题。我正在使用这样的代码:

public class Reader extends Activity 
{
    // declarations
    private class GraphView extends View 
    {
        protected void onDraw(Canvas canvas) 
        {
            synchronized(this)
            {
                final Paint paint = mPaint;
                // some drawings
                myvoid(canvas,paint);
                // some drawings
            }
        }
    }
    void myvoid(Canvas c,Paint p)
    {
        int i=0;
        do //or for cycle
        {
            i++;
            c.drawText(Integer.toString(i),0,100,p); // <<<<<<<<<<<<<<<< Problem
        }
        while (i<100000);
    }
}

画布和文本不会更新,直到 while 循环完成。似乎在那段时间画布被“锁定”了。我怎样才能实现,我可以在画布上看到循环内部的进度?

谢谢,托马斯。

4

3 回答 3

1

问题是您没有给 Android 任何时间来呈现绘图方法的结果。您应该绘制循环的一个步骤并调用 invalidate 来触发下一步。Android 将在屏幕上绘制您的文本,然后它会尝试再次使用增加的计数器重新绘制它。请比较您的代码和我的版本:

private class GraphView extends View {

    protected void onDraw(Canvas canvas) { // some drawings
        myvoid(canvas, paint);
        // some drawings
    }

    void myvoid(Canvas c, Paint p) {
        int i = 0;
        do // or for cycle
        {
            i++;
            c.drawText(Integer.toString(i), 0, 100, p);
        } while (i < 100000);
    }
}

我的 invalidate() 版本:

private class GraphView extends View {
    int i = 0;
    Paint paint = new Paint();

    @Override
    public void draw(Canvas canvas) {
        canvas.drawText(Integer.toString(i), 0, 100, paint);
        i++;
        invalidate();
        super.draw(canvas);
    }
}
于 2013-03-19T10:38:06.727 回答
0

请按照以下步骤操作:

  • 在活动中设置视图
  • 启动辅助线程来执行您的过程
  • 在线程中使视图无效

这个例子可能有帮助:https ://github.com/hamilton-lima/Bolinha/tree/master/src/com/example/bolinha

于 2013-03-19T10:37:50.430 回答
0

我想你可以试试这个

imageView = (ImageView) this.findViewById(R.id.imageView1);

        Display currentDisplay = getWindowManager().getDefaultDisplay();
        @SuppressWarnings("deprecation")
        //float dw = currentDisplay.getWidth();
       // float dh = currentDisplay.getHeight();

        bitmap = Bitmap.createBitmap((int) dw, (int) dh,
            Bitmap.Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        paint = new Paint();
        paint.setColor(Color.RED);
        imageView.setImageBitmap(bitmap);

您可以尝试使您的画布成为位图图像,然后将位图设置为您的图像视图

于 2013-03-19T09:55:33.737 回答