Android 实现ProgressBar菊花旋转进度条的 效果(用于耗时loading时显示)

1,创建简单的自定义Dialog

2,设置dialog属性与布局

3,布局里使用结合了animated-rotate 的progress

1,创建简单的自定义Dialog

public class LoadDia extends Dialog {


    public LoadDia(@NonNull Context context, int themeResId) {
        super(context, R.style.LoadDiaStyle);
    }

    protected LoadDia(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.load_view);
        setCancelable(true);//设置点击dialog外部 不可取消
        setCanceledOnTouchOutside(true);//设置点击dialog外部 不可取消
    }

}

2,设置dialog属性与布局

style文件:
 

    <style name="LoadDiaStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowSoftInputMode">adjustNothing</item>

        <item name="android:windowIsTranslucent">false</item>

        <item name="android:windowContentOverlay">@null</item>

    </style>

布局文件:
 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/spe_dia_load"
    android:orientation="vertical">

    <ProgressBar
        android:layout_centerHorizontal="true"
        android:id="@+id/loadpro"
        android:layout_width="@dimen/dp_34"
        android:layout_height="@dimen/dp_34"
        android:indeterminateBehavior="repeat"
        android:indeterminateDrawable="@drawable/spe_dia_load_view"
        android:layout_marginTop="@dimen/dp_15" />

    <TextView
        android:layout_below="@+id/loadpro"
        android:layout_centerHorizontal="true"
        android:id="@+id/loadDes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/dp_9"
        android:layout_marginEnd="@dimen/dp_19"
        android:layout_marginStart="@dimen/dp_19"
        android:layout_marginTop="@dimen/dp_9"
        android:text="@string/http_loading"
        android:textColor="@android:color/white"
        android:textSize="@dimen/sp_13" />
</RelativeLayout>

重点就是这个:

 3,布局里使用结合了animated-rotate 的progress

spe_dia_load_view:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/rot_load"
    android:pivotX="50%"
    android:pivotY="50%" />

里面是一个普通的图片png文件~
 

rot_load:

 页面需要使用时:

简单的菊花loading完成

-------------------------end---------------------------------

另外一种 圆圈旋转动画

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360">


    <shape
        android:innerRadius="8dp"
        android:shape="ring"
        android:thickness="3dp"
        android:useLevel="false">
        <gradient
            android:centerY="0.50"
            android:endColor="#cccccc"
            android:startColor="@color/white"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

    <!--  android:pivotX     动画执行的起点x坐标 50%代表相对自身宽度的
    android:innerRadius  内环的半径
    android:thickness  环的厚度
    android:useLevel  只有当我们的shape使用在LevelListDrawable中时,这个值为true,否则为false
    android:centerY 渐变中心Y的相对位置,值为0-1
    android:type  渐变类型,还有linear,radial两种类型,线性渐变和放射渐变-->

</animated-rotate>

猜你喜欢

转载自blog.csdn.net/NewActivity/article/details/126190894