使视图无效的问题

时间:2012-09-20 08:14:50

标签: android layout view imageview invalidation

我有一个应用程序,其布局可以加载一些远程图像。当正在加载远程图像时,正在显示一个具有100个强制高度的时钟(我从imageview覆盖了对它的覆盖),当下载远程图像并准备好显示时,时钟消失,然后出现图像。 / p>

它可以工作,但是当图像出现时没有收到正确的高度时,它仍然具有时钟的高度(100)。

我不知道为什么,因为当显示图像时,它会调用一个处理程序,它会刷新图像的视图和具有新高度的图像的容器布局(365),但它无法正常工作。

这是处理程序:

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {                
            super.handleMessage(msg);   
            if( ((ImageView)view) != null && resource != null && resource.image != null ){
                ((ImageView)view).setImageBitmap( resource.image );                                 
                view.getLayoutParams().height=height;
                ((ViewGroup)view.getParent()).getLayoutParams().height=height;
                ((ImageView)view).invalidate(); 
                ((ViewGroup)view.getParent()).invalidate();
                ((ViewGroup)view.getParent()).refreshDrawableState();
                view.invalidate();                      
            }
        }           
    };

正在调用处理程序,正在显示图像,处理程序上的高度值是正确的(365),但图像仍然以时钟的高度(100)显示。

此外,我必须说,如果我阻止屏幕并取消阻止屏幕,图像将显示正确的高度(365)。似乎invalidate()存在问题。

全部谢谢

1 个答案:

答案 0 :(得分:0)

解决

每次加载图片元素时都必须重新注册视图:

view = new FocusableImageView(activity);