【问题标题】:Is there any CircleImageView alternative with TransitionAnimation support?是否有任何具有 TransitionAnimation 支持的 CircleImageView 替代方案?
【发布时间】: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


【解决方案1】:

我自己尝试了以下代码,可以说它可以工作并且过渡非常明显:

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 毫秒太快而无法看到转换本身。

【讨论】:

  • 谢谢。我已经尝试过您的代码,但它对我不起作用,因为我希望我的图像是圆形的并且我使用 CircleImageView。我更新了我的问题。
猜你喜欢
  • 2019-09-18
  • 2023-03-04
  • 2017-03-06
  • 1970-01-01
  • 2012-09-27
  • 2022-01-12
  • 2011-06-07
  • 2012-05-03
  • 2020-04-14
相关资源
最近更新 更多