使用 ImageView ScaleType 设置 TransitionDrawable
Set TransitionDrawable with ImageView ScaleType
我有这段代码可以交叉淡化 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 scaleType
在 XML 布局中设置为 centerCrop
。但是,当交叉淡入淡出完成时,新位图设置为 fitXY
。在其他线程中,他们说可以通过重置 scaleType
来解决,但它也不起作用。就内存而言,调整位图大小不是合适的解决方案。有没有解决方法来实现这个?非常感谢。
P.S.: 请不要建议交叉渐变 2 个 ImageView,或使用 ViewSwitcher 谢谢。
我遇到了同样的问题。问题是 TransitionDrawable
需要两个相同大小的可绘制对象。如果它的大小不同,它会拉伸到第一个图像的大小。毕加索已经处理了这个问题。所以我拿了毕加索的PicassoDrawable,先设置占位符,然后设置位图。
PicassoDrawable.setPlaceholder(imageView, placeholderDrawable);
PicassoDrawable.setBitmap(imageView, context, bitmap);
您可能需要将 class 和那些方法设置为 public。我还删除了一些只与 Picasso 相关的方法。现在它应该可以正确淡出不同的图像尺寸。
我有这段代码可以交叉淡化 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 scaleType
在 XML 布局中设置为 centerCrop
。但是,当交叉淡入淡出完成时,新位图设置为 fitXY
。在其他线程中,他们说可以通过重置 scaleType
来解决,但它也不起作用。就内存而言,调整位图大小不是合适的解决方案。有没有解决方法来实现这个?非常感谢。
P.S.: 请不要建议交叉渐变 2 个 ImageView,或使用 ViewSwitcher 谢谢。
我遇到了同样的问题。问题是 TransitionDrawable
需要两个相同大小的可绘制对象。如果它的大小不同,它会拉伸到第一个图像的大小。毕加索已经处理了这个问题。所以我拿了毕加索的PicassoDrawable,先设置占位符,然后设置位图。
PicassoDrawable.setPlaceholder(imageView, placeholderDrawable);
PicassoDrawable.setBitmap(imageView, context, bitmap);
您可能需要将 class 和那些方法设置为 public。我还删除了一些只与 Picasso 相关的方法。现在它应该可以正确淡出不同的图像尺寸。