实现一个需求:在点击刷新之后,出现一个转动的图标,刷新完成后停止;
记录:
- 转动的实现,在drawable中添加一个xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/setting_wifi_loading_1"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
</item>
</layer-list>
其实这是一个旋转动画继承自animation类,相关属性解释如下:
android:fromDegrees="0"
#初始角度
android:toDegree="360"
#结束时角度,值为正时顺时针旋转,值为负时逆时针旋转
android:pivot"50%"
#旋转中心x轴坐标,取值可以是数值(50)、百分数(50%)、百分数p(50%p),当取值为数值时,缩放起点为View左上角坐标加具体数值像素,当取值为百分数时,表示在当前View左上角坐加上View宽度的具体百分比,当取值为百分数p时,表示在View左上角坐标加上父控件宽度的具体百分比
android:pivotY="50%"
#同上
android:duration="700"
#动画持续时间,毫秒为单位
android:fillAfter="true"
#动画结束后,保持结束时的状态
android:fillBefore="true"
#动画结束后,恢复为初始状态
android:fillEnabled="true"
#效果同上
android:repeatCount="5"
#重复次数,取值为-1时无限重复,默认动画执行一次
android:repeatMode ="reverse"
#重复模式,有reverse和restart两个值,前者为倒序回放,后者为重新开始android:interpolator="@android:anim/accelerate_decelerate_interpolator"
#没做测试,后续看看
- 在layout中添加progress时使用上述动画:
<ProgressBar
android:id="@+id/wifi_refresh_image"
android:layout_width="@dimen/wifi_refresh_w"
android:layout_height="@dimen/wifi_refresh_h"
android:layout_marginLeft="@dimen/wifi_refresh_l"
android:layout_marginTop="@dimen/wifi_refresh_t"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/wifi_scan_loading"
android:visibility="invisible"
/>
设置完成后再activity中显示即是一直旋转的图标,那我们需要设置其停止和开始转动
/**
* 开始刷新动画
*/
public void loadingStartRefresh() {
mLoading.setIndeterminateDrawable(getResources().getDrawable(
R.drawable.wifi_scan_loading));
mLoading.setProgressDrawable(getResources().getDrawable(
R.drawable.wifi_scan_loading));
mLoading.setVisibility(View.VISIBLE);
}
/**
* 停止刷新动画
*/
public void loadingStopRefresh() {
mLoading.setVisibility(View.INVISIBLE);
mLoading.setIndeterminateDrawable(getResources().getDrawable(
R.drawable.setting_wifi_loading_1));
mLoading.setProgressDrawable(getResources().getDrawable(
R.drawable.setting_wifi_loading_1));
}
其实看code很容易就知道,我们只是设置了setIndeterminateDrawable的资源而已,当相关资源设置为旋转的xml时即为旋转的,设置为固定图片时他就是停止的,不过我这里还加了一个显示和隐藏的逻辑而已
以上为今天旋转的记录;
网友评论