0

いくつかのリモート画像をロードするレイアウトのアプリがあります。リモート画像を読み込んでいるときは、強制高さ100の時計が表示され(imageviewからonDrawを上書きしました)、リモート画像をダウンロードして表示する準備ができると、時計が消えて画像が表示されます。

動作しますが、画像が表示されたときに正しい高さが得られなかった場合でも、時計の高さ(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()に問題があるようです。

皆さんありがとう

4

1 に答える 1

0

解決しました

画像要素を読み込むたびにビューを復元する必要があります。

ビュー=新しいFocusableImageView(アクティビティ);

于 2012-09-20T11:10:37.827 に答える