是否有支持TransitionAnimation的CircleImageView替代方案?

时间:2015-07-17 15:37:32

标签: android imageview transitiondrawable

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

有人可以建议我使用淡入淡出的动画正常工作来获得圆形图像吗?

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

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

希望它会有所帮助。

1 个答案:

答案 0 :(得分: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);
}

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

相关问题