Android - 在 invalidate() 上重绘后的监听器

标签 android android-view

在我要求 View 失效后,我希望在 View 重绘完成后收到通知。如 this answer 中所述, invalidate() 方法不会立即调用 View 的 onDraw() UI,而是在消息队列中安排重绘,当主线程运行时执行虚度。

我想显示一个进度对话框,进行一些 UI 修改,然后在正确绘制 View 后关闭该对话框。有什么技巧可以让我知道什么时候绘制了 View 吗?也许通过子类化 View ,覆盖 onDraw() 方法?

最佳答案

我认为您自己回答了您的问题。为什么不:

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

上面的评论说

Invalidate the whole view. If the view is visible, onDraw(android.graphics.Canvas) will >be called at some point in the future. This must be called from a UI thread. To call from >a non-UI thread, call postInvalidate().

试一试:)

编辑:您可能想使用回调来处理此问题。

关于Android - 在 invalidate() 上重绘后的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13779860/

相关文章:

java - 访问 fragment View 时偶尔出现 NPE

java - 错误 : Failed to resolve: com. android.support :mediarouter-v7:23. 4.0

android - 如何以编程方式在 FrameLayout 底部设置 LinearLayout?

android - 在 View 上应用 Fling 和 ACTION_MOVE

android - 在 Android 中同时处理多个 View 的触摸事件

java - 使用自定义 View 设置布局

java - 如何在 Android 中使用单选按钮组 ID 在不同 fragment 之间进行切换

android - 如何解析既可以是对象也可以是数组的JSON?

android - 使用 gridview 显示 SDCard 上特定文件夹中的图像

java - 垃圾多久收集一次?我认为我的对象没有被删除