ImageView の背景をクロスフェードする次のコードがあります。
private void setWithCrossfade(Bitmap bitmap) {
//create drawable vector
Drawable backgrounds[] = new Drawable[2];
//getting first image
backgrounds[0] = mImageView.getDrawable();
backgrounds[1] = new BitmapDrawable(mImageView.getResources(), bitmap);
TransitionDrawable transitionDrawable = new TransitionDrawable(backgrounds);
transitionDrawable.setCrossFadeEnabled(true);
mImageView.setAdjustViewBounds(false);
mImageView.setImageDrawable(transitionDrawable);
//it is needed to reset scale type
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
//start crossfading
transitionDrawable.startTransition(250);
}
ImageViewはXML レイアウトで にscaleType
設定されます。centerCrop
ただし、クロスフェードが終了すると、新しいビットマップは に設定されfitXY
ます。他のスレッドでは、をリセットすることで解決できると言われていますがscaleType
、機能していません。ビットマップのサイズを変更することは、メモリの観点からは適切な解決策ではありません。これを実装するための回避策はありますか? どうもありがとうございました。
PS: 2 つの ImageView のクロスフェードや、ViewSwitcher の使用を提案しないでください。