android ImageView 播放动画

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

首先上几张图:

Animation-List

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

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
  <item android:drawable="@drawable/a0" android:duration="100"/>
  <item android:drawable="@drawable/a1" android:duration="100"/>
  <item android:drawable="@drawable/a2" android:duration="100"/>
  <item android:drawable="@drawable/a3" android:duration="100"/>
  <item android:drawable="@drawable/a4" android:duration="100"/>

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

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

 <ImageView
      android:id="@+id/image_view"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:background="@drawable/animation_list_filling"
      />

播放

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

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


属性动画:

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

首先我们创建Level_list

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/a0" android:maxLevel="1"/>
  <item android:drawable="@drawable/a1" android:maxLevel="2"/>
  <item android:drawable="@drawable/a2" android:maxLevel="3"/>
  <item android:drawable="@drawable/a3" android:maxLevel="4"/>
  <item android:drawable="@drawable/a4" android:maxLevel="5"/>
</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放入布局文件

<com.android.test.main.view.LoadingImageView
                        android:layout_width="75dp"
                        android:layout_height="75dp"
                        android:id="@+id/lark_loading_iv"
                        android:layout_gravity="center"
                        android:layout_marginTop="136dp"/>


自己开始写属性动画

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







  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值