我有一个视图,我想在线显示一些资源。所以我创建了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来简化数据请求。
答案 0 :(得分:0)
protected void dispatchDraw(final Canvas canvas) {
// ^^^^^
答案 1 :(得分:0)
我是这篇文章的提问者。我找到了一个解决方案。 (如果这是最好的,我不这样做,但我确实有效。)
当我尝试通过AsyncHttpClient
请求数据时,这似乎是由异步线程引起的。一旦请求线程启动,UI线程就完成并返回,canvas
已超出其范围。
然后,当返回数据时,canvas
将不再起作用。