4

我有图像视图。在 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 不能正常工作并导致图像混乱。”(https://github.com/hdodenhof/CircleImageView)。

那么有人可以建议我如何让动画淡入淡出的圆形图像正常工作吗?

更新2: 我发现在两个圆形图像之间获得平滑过渡的解决方法是淡出第一个,然后使用动画淡入第二个并延迟可运行。这是代码示例。

淡出.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);

希望它会有所帮助。

4

1 回答 1

2

我自己尝试了以下代码,可以说它有效并且转换非常明显:

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);
}

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

于 2015-07-17T16:40:30.257 回答