Android - 在重写invalidate()之后的监听器

Axa*_*dax 3 android android-view

我希望在视图完成重绘后得到通知,我要求它无效.如本回答所述,该invalidate()方法不会onDraw()立即调用View的UI,而是在主线程空闲之后执行的消息队列中调度重绘.

我想显示一个进度对话框,进行一些UI修改,然后在正确绘制视图时关闭对话框.是否有一些技巧可以让我知道何时绘制视图?也许通过继承视图,重写onDraw()方法?

Mur*_*mel 5

我想你自己回答了你的问题.为什么不:

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();
}
Run Code Online (Sandbox Code Playgroud)

如果你看一下来源:

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().

试试吧 :)

编辑:可能你想使用Callback来处理这个问题.