いくつかのリモート画像をロードするレイアウトのアプリがあります。リモート画像を読み込んでいるときは、強制高さ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()に問題があるようです。
皆さんありがとう