Android 如何使用淡入动画实现圆形图像?

Android 如何使用淡入动画实现圆形图像?,android,listview,animation,fadein,Android,Listview,Animation,Fadein,我有列表视图,我希望每个列表项内的图像视图都是圆形。我还想动画图像出现一种“淡入”动画 我试过这个: private void setImageDrawable(ImageView imageView, Bitmap bitmap) { if (mFadeInBitmap) { // mFadeInBitmap = true; BitmapDrawable drawable = null, placeholder = null;

我有列表视图,我希望每个列表项内的图像视图都是圆形。我还想动画图像出现一种“淡入”动画

我试过这个:

 private void setImageDrawable(ImageView imageView, Bitmap bitmap) {
        if (mFadeInBitmap) { // mFadeInBitmap = true;
            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(500);
        } else {
            imageView.setImageBitmap(bitmap);
        }
    }
但这段代码不起作用,因为我尝试使用和作为ImageView。两者都不支持过渡

所以我想知道有没有简单的方法来实现带有淡入动画的圆形图像?你会怎么做

非常感谢您的帮助。
提前谢谢

使用毕加索库制作动画,您还可以对图像进行取整,并将图像存储到自动捕捉

Picasso.with(activity).load(mayorShipImageLink).transform(new CircleTransform()).into(ImageView);
并创建java文件circlettransform.java

public class CircleTransform implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());

int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;

 Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
 if (squaredBitmap != source) {
  source.recycle();
}

Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());

Canvas canvas = new Canvas(bitmap);
 Paint paint = new Paint();
 BitmapShader shader = new BitmapShader(squaredBitmap,
BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
paint.setShader(shader);
paint.setAntiAlias(true);

 float r = size / 2f;
 canvas.drawCircle(r, r, r, paint);

  squaredBitmap.recycle();
  return bitmap;
   }

  @Override
   public String key() {
   return "circle";
   } 
  }

可以使用动画实现淡出和淡入动画在res->anim中创建一个文件夹并定义fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:fillAfter="true">
     <alpha
         android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="1000"
         android:interpolator="@android:anim/accelerate_interpolator"
      />
</set>

尝试使用android.support.v4.graphics.drawable.RoundedBitmapDrawable这太棒了!谢谢@L-X!只有一件事:在图像加载到列表之前,我想显示占位符。但调用动画占位符后,图像将消失,动画开始。有没有办法使占位符图像淡入到刚加载的图像中?有一个技巧可以使用,所以我假设您希望在从服务器或文件加载图像时设置动画。在“fade_out.xml”中创建两个animation.xml文件,其中fromAlpha=“1.0”和toAlpha=“0.0”和“fade_in.xml”与上述相同,然后设置加载的最终图像调用fade_动画,然后将imageView设置为新图像(在处理程序类的帮助下延迟1秒),并在动画中调用fade_,如果你不明白,我可以用代码解释,也可以用代码示例解释,因为我从来没有处理过处理程序类。淡出的持续时间是1000毫秒,这就是为什么在处理程序中我使用1000让它等待动画完成,然后更改你想要的图像并开始淡出,我希望它清晰谢谢你!您的解决方案很简单,效果很好。我会尽力达到我想要的效果,但如果我找不到,我会用你的。
<?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="1000"
         android:interpolator="@android:anim/accelerate_interpolator"
      />
</set>
 Animation anim=AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_out);
 imageView.startAnimation(anim);
 final Handler handler=new Handler();

 handler.postDelayed(new Runnable(){

    @Override
    public void run() {
        imageView.setImageResource(R.drawable.ic_network_wifi_black_48dp);//changing to different image ,here you will set image that you have loaded
        anim=AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in);
        imageView.startAnimation(anim);
    }

  },1000);