我个人是比较喜欢逛贴吧的,贴吧里总是会有很多搞笑的动态图片,经常看一看就会感觉欢乐很多,可以释放掉不少平时的压力。确实,比起一张单调的图片,动态图片明显更加的有意思。一般动态图片都是GIF格式的,浏览器中可以直接将这种格式的图片播放成动画。
不过很可惜的是,Android的原生控件并不支持播放GIF格式的图片。我们都知道,在Android中如果想要显示一张图片,可以借助ImageView控件来完成,但是如果将一张GIF图片设置到ImageView里,它只会显示这张图片的第一帧,不会产生任何的动画效果。
那么就没有办法在安卓里播放GIF图片了吗?当然不是,我们可以通过自定义控件的方式来实现这个功能.ImageView无法播放GIF图片说明它的功能还不够强大,那么今天我们就来编写一个PowerImageView控件,让它既能支持ImageView控件原生的所有功能,同时还可以播放GIF图片。
下面我们就开始吧,首先新建一个项目,起名就叫PowerImageViewTest,这里使用Android 4.0的API。
由于是要自定义控件,我们还可能会用到一些自定义的属性,因此值在目录下新建一个attrs。xml的文件,可以在这个文件中添加任何需要自定义的属性。这里我们目前只需要一个auto_play属性,代码如下所示:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; resources> & lt; declare-styleable name=" PowerImageView比; & lt; attr name=" auto_play格式=安级弊4? lt;/attr> & lt;/declare-styleable> & lt;/resources>>之前,完成了这个文件之后,下面我们来开始编写最最重要的PowerImageView类,由于这个类要支持ImageView的所有功能,因此需要让PowerImageView继承自ImageView,代码如下所示:
公共类PowerImageView ImageView延伸实现> & lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: layout_width=" match_parent " android: layout_height=癿atch_parent”比; & lt; com.example.powerimageviewtest.PowerImageView android: id=癅 + id/image_view” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerInParent=" true " android: src=" https://www.yisu.com/zixun/@drawable/动物”/比; & lt;/RelativeLayout>,可以看的到,PowerImageView的用法和ImageView几乎完全一样,使用android: src属性来指定一张图片即可,这里指定的动画就是一张GIF图片。然后我们让PowerImageView在布局里居中显示。
MainActivity中的代码都是自动生成的,这里就不再贴出来了。在AndroidManifest.xml中还有一点需要注意,有些4.0以上系统的手机启动了硬件加速功能之后会导致GIF动画播放不出来,因此我们需要在AndroidManifest.xml中去禁用硬件加速功能,可以通过指定android: hardwareAccelerated属性来完成,代码如下所示:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt;清单xmlns: android=" http://schemas.android.com/apk/res/android " 包=" com.example.powerimageviewtest " android: versionCode=" 1 " android: versionName=" 1.0 "比; & lt; uses-sdk android: minSdkVersion=" 14 " android: targetSdkVersion=?7”/比; & lt;应用程序 android: allowBackup=" true " android:图标=" @drawable/ic_launcher” android: label=" @string/app_name” android:主题=" @style/AppTheme” android: hardwareAccelerated=" false " 比; & lt;活动 android: name=" com.example.powerimageviewtest.MainActivity " android: label=" @string/app_name”比; & lt; intent-filter> & lt;行动android: name=" android.intent.action.MAIN "/比; & lt;类别android: name=" android.intent.category.LAUNCHER "/比; & lt;/intent-filter> & lt;/activity> & lt;/application> & lt;/manifest> >之前现在可以来运行一下代码了,一打开程序你就会看到GIF图片的第一帧,点击图片之后就可以播放GIF动画了,如下图所示:
,
然后我们还可以通过修改activity_main。xml中的代码,给它加上允许自动播放的属性,代码如下所示:
& lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android " xmlns: attr=" http://schemas.android.com/apk/res/com.example.powerimageviewtest " android: layout_width=" match_parent " android: layout_height=癿atch_parent”比; & lt; com.example.powerimageviewtest.PowerImageView android: id=癅 + id/image_view” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerInParent=" true " android: src=" https://www.yisu.com/zixun/@drawable/动物” attr: auto_play=" true "/比; & lt;/RelativeLayout>Android使用PowerImageView实现播放强大的ImageView动画效果