2015-07-19 21 views
1

我有列表视图,我希望每个列表项内的图像视图为圆形。另外我想让动画形象出现一种“淡入”动画。如何实现在动画中淡入淡出的圆形图像?

我已经试过这样:

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

但是这个代码不工作,因为我曾尝试使用CircleImageViewRoundedImageView为ImageView的。既不支持TransitionAnimation。

所以我不知道有什么简单的方法来实现在动画中淡入淡出的圆形图像?你会怎么做?

任何帮助,非常感谢。 在此先感谢!

+0

尝试使用'android.support.v4.graphics.drawable.RoundedBitmapDrawable' – pskink

回答

2

使用毕加索图书馆的动画,也可以圆形图像,你可以存储图像捕捉自动。

Picasso.with(activity).load(mayorShipImageLink).transform(new CircleTransform()).into(ImageView); 

和创建Java文件CircleTransform.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"; 
    } 
    } 
1

您可以使用动画来实现的淡出和淡入的动画创建水库>动画的文件夹,并定义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> 

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="1000" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     /> 
</set> 

然后在你的java

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

这是伟大的!谢谢@ L-X!只有一件事:在将图像加载到列表之前,我想要显示占位符。但在调用动画占位符图像消失并开始动画之后。有没有什么办法让淡入从占位符图像到刚加载的图像? – AlexKost

+0

那么有一个技巧,你可以使用,所以我假设你想动画,当你从服务器或文件加载图像。在设置最后一张载入调用fade_out动画之前设置fromAlpha =“1.0”和toAlpha =“0.0”和“fade_in.xml”中的“fade_out.xml”之前创建两个animation.xml文件,然后设置你的imageView到新图像(在Handler类的帮助下延迟1秒),并调用fade_in动画,如果你不明白,我可以用代码解释 –

+0

请解释代码示例,因为我从来没有处理过处理程序类。 – AlexKost