Android使用PowerImageView实现播放强大的ImageView动画效果

  

我个人是比较喜欢逛贴吧的,贴吧里总是会有很多搞笑的动态图片,经常看一看就会感觉欢乐很多,可以释放掉不少平时的压力。确实,比起一张单调的图片,动态图片明显更加的有意思。一般动态图片都是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动画了,如下图所示:

  

,  Android使用PowerImageView实现播放强大的ImageView动画效果

  

然后我们还可以通过修改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动画效果