在Android Notification显现中,咱们通常显现一些静态元素,即便运用自定义布局,也不破例,由于RemoteViews
有着许多限制,例如运用的控件只有那些个根本控件,更新界面也有必要经过RemoteViews
供给的各种set办法。但有时候,咱们便是想要去显现动画,由于动画能够供给更好的视觉作用。那么本文供给两种较简略的办法。
代码示例见:gitee.com/spectre1225…
办法一:运用ViewFlipper来实现逐帧动画的作用
榜首种办法是利用RemoteViews
支持的ViewFlipper
控件配合多个ImageView
来循环显现,到达类似逐帧动画的作用。自定义告诉布局中的对应内容是:
<ViewFlipper
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="end|center_vertical"
android:autoStart="true"
android:flipInterval="90">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim0" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim15" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim28" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim43" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim57" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim71" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim85" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/stat_sys_battery_charge_anim100" />
</ViewFlipper>
Java代码中不需要额定设置。注意这里的ViewFlipper
要设置android:autoStart="true"
,这样动画才会自动播放起来。
- 长处:各版本体系兼容性好,都能够运用。
- 缺陷:ImageView过多,代码也多,修正替换麻烦。
办法二:运用AnimatedImageDrawable来显现GIF动画
Android 9.0 中引入了一个新的Drawable来显现GIF图片:AnimatedImageDrawable
,对应的xml标签是<animated-image>
,这样一来,咱们能够直接将一个GIF图片ic_test_gif.gif
放到drawable目录中,然后新建一个ic_anim_gif.xml
来引证:
<?xml version="1.0" encoding="utf-8"?>
<animated-image xmlns:android="http://schemas.android.com/apk/res/android"
android:autoStart="true"
android:autoMirrored="true"
android:src="@drawable/ic_test_gif" />
在自定义告诉布局中直接编写:
<ImageView
android:id="@+id/iv_logo"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_anim_gif" />
这里ImageView
的src
不直接引证gif图片是由于需要用到animated-image
的autoStart
特点,毕竟RemoteViews
没法直接取出ImageView
的drawable。
考虑到体系版本兼容,能够挑选在代码中将动画资源设置给ImageView
:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
remoteViews.setImageViewResource(R.id.iv_logo, R.drawable.ic_anim_gif);
}
这种办法优缺陷如下:
- 长处:资源少,一个gif,只要一个
animated-image
的xml,且替换简略。 - 缺陷:只有Android 9.0 以上的体系能够用。