使用Android原生控件ProgressBar加载GIF

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/xieluoxixi/article/details/79580470

    开题在之前的一篇博文安卓自定义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的方式我在很久之前的一个开源项目《曲园帮》中就做过类似的处理,只不过今天业务上又遇到类似的处理方式,索性拿出来分享给大家。

猜你喜欢

转载自blog.csdn.net/xieluoxixi/article/details/79580470