android ImageView 播放动画

最近要做一个loading的动画,刚开始使用gif图做,但是gif图效果不好,播放速度太慢,后来通过ImageView一帧一帧的播放。

首先上几张图:

android ImageView 播放动画_第1张图片android ImageView 播放动画_第2张图片android ImageView 播放动画_第3张图片android ImageView 播放动画_第4张图片android ImageView 播放动画_第5张图片

Animation-List

Animation-list是帧动画的默认选择,我们在drawable文件夹下创建一个my_animation_list.xml



  
  
  
  
  

android:oneshot="false"表示循环播放,如果为true就只会拨一次。

然后在布局文件中添加一个ImageView,ImageView背景设为my_animation_list

 

播放

播放很简单,直接上代码:

 ImageView imageView= (ImageView) findViewById(R.id.image_view);
                ((AnimationDrawable) imageView.getBackground()).start();


属性动画:

帧动画很简单,但是帧动画有个问题就是帧动画如果放的图片过多,容易出现OOM,所以为了保险起见,我们使用属性动画来实现。

首先我们创建Level_list



  
  
  
  
  
然后我们自己将ImageView的Level包裹一下,形成Set  Get属性

public class LoadingImageView extends ImageView {
    private int imageLevel = 0;
    private int maxLevel = 5;
    public LoadingImageView(Context context) {
        super(context);
    }

    public LoadingImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public LoadingImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setImageLevel(int level) {
        if (this.imageLevel == level)
            return;
        super.setImageLevel(level);
        this.imageLevel = level;
    }

    public int getImageLevel() {
        return imageLevel;
    }

    public void nextLevel() {
        setImageLevel(imageLevel++ % maxLevel);
    }

    public void setMaxLevel(int maxLevel) {
        this.maxLevel = maxLevel;
    }

}
将自定义的ImageView放入布局文件


自己开始写属性动画

LoadingImageView imageView2= (LoadingImageView) findViewById(R.id.level_image);
        imageView2.setImageResource(R.drawable.level_lists);
        ObjectAnimator headerAnimator= ObjectAnimator.ofInt(imageView2,"imageLevel",1,5);
        headerAnimator.setRepeatCount(ObjectAnimator.INFINITE);
        headerAnimator.setInterpolator(new LinearInterpolator());
        headerAnimator.setRepeatMode(ObjectAnimator.RESTART);
        headerAnimator.setDuration(1000);
        headerAnimator.start();







你可能感兴趣的:(android开发)