使用Android原生控件ProgressBar加载GIF
程序员文章站
2024-02-05 20:35:10
...
开题: 在之前的一篇博文安卓自定义View实现加载gif图片中我为大家分析了利用android.graphics.Movie将GIF文件以Byte的形式引入来加载GIF,大体加载GIF的过程为: 引入Gif资源--->把gif转成byte--->利用Movie对象提供的方法计算出gif的时长---->通过onDraw不断的把更新之后的当前帧绘制出来。
今天为大家带来另一种较为轻便的动图或者loading设计实现的方案,今天的主题是使用Android原生控件ProgressBar加以改良,来实现loading或者类似gif的加载。先上图
我先分析一下实现过程然后再为大家贴上具体实现代码。如开题所说,该方式并不是真正意思上的加载gif,而是利用progressbar中indeterminateDrawable属性加载提前做好的一帧一帧的图片来完成的。
过程分析:
1.提前做好被加载的一帧一帧的图片资源
2.在drawable文件目录下新建一个animation-list文件,并且把做好的一帧一帧的图片资源以item的形式加入,并指定该文件oneshot属性为false。
3.给progressBar的indeterminationDrawable属性指定drawable文件目录下的animation-list文件。
源码示例:
drawable文件目录下的animation-list文件:animation_list_load_question.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/ic_load_question_1"
android:duration="150" />
<item
android:drawable="@drawable/ic_load_question_2"
android:duration="150" />
<item
android:drawable="@drawable/ic_load_question_3"
android:duration="150" />
<item
android:drawable="@drawable/ic_load_question_4"
android:duration="150" />
<item
android:drawable="@drawable/ic_load_question_5"
android:duration="150" />
<item
android:drawable="@drawable/ic_load_question_6"
android:duration="150" />
</animation-list>
引用ProgressBar的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_load_animation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_ffffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="125px"
android:text="难度系数:3.5"
android:textColor="@color/color_939393"
android:textSize="30px" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:gravity="center">
<ProgressBar
android:layout_width="500px"
android:layout_height="500px"
android:indeterminateDrawable="@drawable/animation_list_load_question" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:layout_marginBottom="40px"
android:gravity="center"
android:text="试题正在赶来\n..."
android:textColor="@color/color_ffffff"
android:textSize="30px" />
</FrameLayout>
</RelativeLayout>
其实类似的制作loading的方式我在很久之前的一个开源项目《曲园帮》中就做过类似的处理,只不过今天业务上又遇到类似的处理方式,索性拿出来分享给大家。
上一篇: Android游戏开发系统控件-ProgressBar
下一篇: Android - 控件抖动效果
推荐阅读
-
使用Android原生控件ProgressBar加载GIF
-
【Android】使用android-gif-drawable包加载GIF动图
-
Android进度条控件progressbar使用方法详解
-
Android进度条控件progressbar使用方法详解
-
android ListView和ProgressBar(进度条控件)的使用方法
-
Android原生侧滑控件DrawerLayout使用方法详解
-
android ListView和ProgressBar(进度条控件)的使用方法
-
【Android】使用android-gif-drawable包加载GIF动图
-
安卓学习笔记--- Android加载Gif动画android-gif-drawable的使用
-
Android原生侧滑控件DrawerLayout使用方法详解