【发布时间】:2015-07-17 15:37:32
【问题描述】:
我有 ImageView。在 onPostExecute 中加载位图后,我调用 setImageDrawable 用图像填充 imageView(我使用 CircleImageView)。但是TransitionDrawable 只显示第一张图像并且没有执行交易。我如何让这个工作?提前致谢。
private void setImageDrawable(ImageView imageView, Bitmap bitmap) {
if (mFadeInBitmap) {
BitmapDrawable drawable = null, placeholder = null;
if (bitmap != null) {
drawable = new BitmapDrawable(mResources, bitmap);
placeholder = new BitmapDrawable(mResources, mPlaceHolderBitmap);
}
final TransitionDrawable td =
new TransitionDrawable(new Drawable[] {
placeholder,
drawable,
});
imageView.setImageDrawable(td);
td.startTransition(200);
} else {
imageView.setImageBitmap(bitmap);
}
}
更新:我在 CircleImageView 文档中找到了为什么它对我不起作用的解决方案:“使用带有 CircleImageView 的 TransitionDrawable 不能正常工作并导致图像混乱。”(@ 987654321@)。
那么有人可以建议我如何让动画淡入淡出的圆形图像正常工作吗?
更新 2: 我发现在两个圆形图像之间获得平滑过渡的解决方法是淡出第一个图像,然后使用 Animation 淡入第二个图像并延迟可运行。这是代码示例。
fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="100"
android:interpolator="@android:anim/accelerate_interpolator"
/>
</set>
fade_in.xml 几乎相同,只是您按位置更改了 fromAlpha 和 toAlpha。之后将这些动画应用到您的圆形图像视图中,如下所示:
Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_out);
imageView.startAnimation(anim);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(value);//changing to different image ,here you will set image that you have loaded
Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.fade_in);
imageView.startAnimation(anim);
}
}, 100);
希望对您有所帮助。
【问题讨论】:
-
您确定执行了正确的
if分支吗? -
是的。 mFadeInBitmap = true
-
嗨,亚历克斯!你找到解决问题的方法了吗?我的情况和你一样,我想找到一个正确的解决方案。非常感谢!
-
嗨@anthony。不幸的是,我还没有找到任何方法来使用 TransitionDrawable 在占位符和加载的图像之间进行平滑过渡。但是有一些解决方法。我已经更新了我的答案。
标签: android imageview transitiondrawable