1

我有一个视图,我想在线显示一些资源。所以我创建了一个子类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来简化数据请求。

4

2 回答 2

0

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


这似乎是我尝试通过AsyncHttpClient. 一旦请求线程启动,UI 线程就完成并返回,并且canvas已经超出了它的范围。

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

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

于 2013-04-22T00:40:35.167 回答
0
protected void dispatchDraw(final Canvas canvas) {
//                          ^^^^^
于 2013-04-18T11:21:50.760 回答