在我要求视图失效后,我希望在视图完成重绘后收到通知。正如中所述这个答案 https://stackoverflow.com/a/5073130/72746, the invalidate()
方法不调用视图的onDraw()
UI 立即执行,但会在消息队列中安排重绘,该重绘会在主线程空闲后执行。
我想显示一个进度对话框,进行一些 UI 修改,然后在正确绘制视图时关闭该对话框。我可以做一些技巧来知道视图何时被绘制吗?也许通过子类化视图,覆盖onDraw()
method?
我想你自己已经回答了你的问题。为什么不:
public class DrawListenerView extends View{
private Callback callback;
public DrawListenerView(Callback callback){
this.callback = callback;
}
@Override
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
//add your method here you want to call
//Or use a Callback-pattern
callback.finish();
}
}
public interface Callback(){
public void finish();
}
如果你看一下源码:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/View.java#View.invalidate%28%29 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/View.java#View.invalidate%28%29
上面的评论说
使整个视图无效。如果视图可见,则 onDraw(android.graphics.Canvas) 将在将来的某个时刻被调用。这必须从 UI 线程调用。要从非 UI 线程调用,请调用 postInvalidate()。
尝试一下 :)
编辑:可能您想使用回调来处理这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)