MobileDeviceTalks 2018-02-08
在工作中遇到一个问题,在跳转到一个有多页Fragment数据的Activity的时候,Activity的打开速度非常慢。
于是就想到了加入一个loading进度条。让用户知道正在载入数据。而不至于觉得应用无响应。
自己定义进度条能够用三种方法实现。
能够自己定义动画,像帧动画那样实现loading旋转载入的效果。
能够使用一张图片。实现自己定义。
也能够通过颜色实现自己定义。
1.自己定义动画实现
在res/anim/loading.xml下定义的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="150" android:drawable="@drawable/loading_01" />
<item android:duration="150" android:drawable="@drawable/loading_02" />
<item android:duration="150" android:drawable="@drawable/loading_03" />
<item android:duration="150" android:drawable="@drawable/loading_04" />
<item android:duration="150" android:drawable="@drawable/loading_05" />
<item android:duration="150" android:drawable="@drawable/loading_06" />
<item android:duration="150" android:drawable="@drawable/loading_07" />
</animation-list>
2.使用图片进行自己定义。在res/drawable/loading.xml文件
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_black_16"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360" />
3.通过颜色进行自己定义,在res/drawable/loading.xml文件
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="8"
android:useLevel="false" >
<gradient
android:centerColor="#FFFFFF"
android:centerY="0.50"
android:endColor="#1E90FF"
android:startColor="#000000"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
在使用的时候
<ProgressBar
android:id="@+id/loading"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminateDrawable="@drawable/loadingl"
/>
注意,使用动画方式的和使用图片颜色方式的。要注意差别是在哪个资源目录下的,drawable和anim目录是不一样的。
对于使用颜色方式自己定义的loading做一下说明:
fromDegrees:旋转动画 開始的角度
toDegrees:旋转动画结束的角度
pivotX:动画相对于控件的 x 坐标的位置
pivotY:动画相对于控件的 y 坐标的位置
innerRadiusRatio:以环的宽度比率来表示内环的半径,能够被innerRadiu覆盖
innerRadiu:指定内环半径
thickness:指定环的厚度
thicknessRatio:以环的宽度比率来表示环的厚度。能够被thickness覆盖
shape:控件形状:rectangle(矩形),oval(椭圆),line(线条), ring(环)。默认矩形
gradient设置填充的渐变色
startColor:起始颜色
centerColor:中间渐变的颜色
endColor:结束颜色
angle设置渐变的角度,仅当渐变类型为线性渐变时有效。
默认0值为水平向右,其它角度以逆时针旋转为准,比如设置为90则是自下而上。
设置为270自上而下,以此类推。注意:必须是45的倍数。
centerX、centerY两个属性用于设置渐变的中心点位置。
仅当渐变类型为放射渐变时有效。类型为分数或小数,不接受Dimension。
默认值是0.5,有效值是0.0~1.0。超出该范围后会看不出渐变效果。
useLevel属性通常不使用。该属性用于指定是否将该shape当成一个LevelListDrawable来使用。默认值为false。