我有图像视图。在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中使用可传递的Drawable无法正常工作,并导致图像混乱。”(https://github.com/hdodenhof/CircleImageView)。
那么有人能给我推荐一种让淡入动画的圆形图像正常工作的方法吗?
更新2:
我发现在两个圆形图像之间获得平滑过渡的解决方法是先淡出第一个图像,然后淡入第二个图像,并使用动画和延迟后运行。下面是代码示例。
FADEOUT.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>

xml中的fade_几乎完全相同,除了您按位置从alpha和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);

希望能有所帮助。

最佳答案

我自己也试过下面的代码,可以说它是有效的,而且转换非常明显:

private void setImageDrawable(ImageView imageView) {
    Bitmap bitmap1 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    Bitmap bitmap2 = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    new Canvas(bitmap1).drawRect(0, 0, 100, 100, mWhitePaint);
    new Canvas(bitmap2).drawRect(0, 0, 100, 100, mBlackPaint);

    BitmapDrawable drawable1 = new BitmapDrawable(getResources(), bitmap1);
    BitmapDrawable drawable2 = new BitmapDrawable(getResources(), bitmap2);
    TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[] {drawable1, drawable2});
    imageView.setImageDrawable(transitionDrawable);
    transitionDrawable.startTransition(3000);
}

请检查您的bitmap是否不是null并且它与mPlaceHolderBitmap不同(也不应该是null)。也可以尝试将转换持续时间设置为3秒,例如,因为可能200毫秒太快,无法看到转换本身。

07-26 06:02