5

フラグメントの背景として ImageView を設定し (imageview は幅と高さの両方で match_parent に設定されています)、scaletype は centerCrop に設定されています。画像をダウンロードしてそこに非同期で配置し、ダウンロードが完了したら TransitionDrawable を使用してクロスフェードします。

画像は最初は正しいスケールタイプで表示されますが、別のフラグメントに移動してから、イメージビューを背景としてこのフラグメントに戻ると、画像がゆがんだり伸びたりして表示されます (代わりに imageView が fitXY に設定されているように見えます)。

TransitionDrawable を使用しない場合、画像は本来の外観のままです。

正しいアスペクト比を維持する TransitionDrawable に相当するものはありますか? または、このサイズ変更を防ぐために TransitionDrawable に設定する必要があるものはありますか?

私が本当にやりたいのは、画像間の素敵な移行です。アニメーションが終了したら、TransitionDrawable の 2 番目のレイヤーのドローアブルに画像を設定することを考えていましたが、アニメーションがいつ終了したかを監視する方法はありません...

編集:画像が同じ寸法ではないことに言及したいと思いましたが、それが違いを生むかどうかはわかりません

編集2:ドローアブルを設定するコードは次のとおりです。

  //code above to download image
 BitmapDrawable bitmapDrawable = new BitmapDrawable(imageview.getResources(), bitmap);
        TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{imageview.getDrawable(), bitmapDrawable});
        imageview.setImageDrawable(transitionDrawable);
        transitionDrawable.startTransition(300);
4

1 に答える 1

7

異なる次元の画像を使用していますか? それが問題を引き起こしている可能性があります。同じサイズの画像を使用してみてください。

編集:解決策が見つかりました:コマンドを使用した後、ImageViewのスケールタイプを再度設定する必要がありますsetImageDrawable

    BitmapDrawable bitmapDrawable = new BitmapDrawable(imageview.getResources(), bitmap);
    TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{imageview.getDrawable(), bitmapDrawable});
    imageview.setImageDrawable(transitionDrawable);
    imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
    transitionDrawable.startTransition(300);
于 2014-01-20T15:39:34.383 に答える