使用ImageView ScaleType设置TransitionDrawable

时间:2015-05-16 01:44:48

标签: android android-animation android-drawable android-bitmap transitiondrawable

我有这个代码来交叉淡化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谢谢。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。问题是TransitionDrawable需要两个相同大小的drawable。如果它的大小不同,则会拉伸到第一个图像的大小。毕加索已经处理过了。所以我从毕加索那里拿了PicassoDrawable并首先设置了占位符,然后是位图。

PicassoDrawable.setPlaceholder(imageView, placeholderDrawable);
PicassoDrawable.setBitmap(imageView, context, bitmap);

您可能需要将类和这些方法设置为public。我也删除了一些仅与毕加索相关的方法。现在它应该使用不同的图像尺寸正确淡化。