无法在画布中呈现在线资源或简单文本

时间:2013-04-18 11:18:41

标签: android canvas graphics

我有一个视图,我想在线显示一些资源。所以我创建了android.view.View的子类并覆盖了dispatchDraw方法:

public class TView extends View {
    AsyncHttpClient client = new AsyncHttpClient();
    private Paint p = new Paint();

    public TView(Context context) {
        super(context);
    }

    @Override
    protected void dispatchDraw(final Canvas canvas) {
        client.get("http://developer.android.com/assets/images/dac_logo.png", new BinaryHttpResponseHandler() {
            @Override
            public void onSuccess(byte[] arg0) {
                doRender(canvas, arg0);
            }
        });
        super.dispatchDraw(canvas);
    }

    private void doRender(Canvas c, byte[] data) {
        Log.d("xx", "data length :" + data.length);
        c.drawText("hello", 10, 10 + p.getTextSize(), p);
        Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
        BitmapDrawable bd = new BitmapDrawable(bmp);
        bd.draw(c);
    }
}

但是以下代码不起作用。

我只收到了日志消息:

04-18 19:10:44.933: D/xx(1258): data length :2170

似乎下载了数据。但是画布没有呈现它。

有什么问题?

顺便说一句,我使用AsycHttpClient来简化数据请求。

2 个答案:

答案 0 :(得分:0)

protected void dispatchDraw(final Canvas canvas) {
//                          ^^^^^

答案 1 :(得分:0)

我是这篇文章的提问者。我找到了一个解决方案。 (如果这是最好的,我不这样做,但我确实有效。)


当我尝试通过AsyncHttpClient请求数据时,这似乎是由异步线程引起的。一旦请求线程启动,UI线程就完成并返回,canvas已超出其范围。

然后,当返回数据时,canvas将不再起作用。

顺便说一下,我仍然希望得到一个令人信服的答案。