Android Loading框
2021-03-08 本文已影响0人
ryanxun
嘿,今天的你过的还好吗
今天想给自己的项目加一个loading框,本来寻思直接网上拷一个算了,后来看了一会发现,不是很美丽,而且还得自己写动画.........
我这么懒得人怎么会写动画呢.哦吼.然后就找资源库.终于!!!!
在GitHub上看到了一个
//AVLoadingIndicatorView
implementation 'com.wang.avi:library:2.1.3'
github地址: https://github.com/81813780/AVLoadingIndicatorView
图片是针不错
image.png满足了我这没啥审美的人.
都晓得github的东西,拿来就用
引包,根据流程走哦吼吼
但是这个引完后再xml中引用...
有两种.
1.简单的
<com.wang.avi.AVLoadingIndicatorView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:indicatorName="BallPulseIndicator"
/>
引完即用.但是默认的大家都懂...必然会有一些小东西没法满足
所以官方给了第二种
2.进阶版
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/avi"
android:layout_width="wrap_content" //可以自定义尺寸
android:layout_height="wrap_content" //可以自定义尺寸
style="@style/AVLoadingIndicatorView"// AVLoadingIndicatorView.Large 或者 AVLoadingIndicatorView.Small
android:visibility="visible" //可见或者消失
app:indicatorName="BallPulseIndicator"//Indicator Name
app:indicatorColor="your color" //你得颜色
/>
最后
void startAnim(){
avi.show();
// 或者 avi.smoothToShow();
}
void stopAnim(){
avi.hide();
// 或者 avi.smoothToHide();
}
至此完成..............怎么可能
loading框自然是在需要的时候调用才ok.....
依然是网上搜了一堆.感觉都没啥用...
就自己写了一个封装一下....仅供参考...
public class Loading extends ProgressDialog {
private AVLoadingIndicatorView avi;
public LoadingView(Context context) {
super(context);
}
public LoadingView(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
avi = findViewById(R.id.ddd);
init(getContext());
}
private void init(Context context) {
setCancelable(false);// 设置返回键无法返回
setCanceledOnTouchOutside(false); //点击区域外消失
setContentView(R.layout.loading);//loading的xml文件
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(params);
}
@Override
public void show() {//开启
super.show();
// avi.show();
}
@Override
public void dismiss() {//关闭
super.dismiss();
// avi.hide();
}
}
loading,xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:orientation="vertical">
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/ddd"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:indicatorName="BallPulseIndicator" />
<TextView
android:layout_below="@+id/ddd"
android:layout_centerHorizontal="true"
android:id="@+id/loadtv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载中..."
android:textColor="#9a9b98"
android:textSize="12sp" />
</RelativeLayout>
背景色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)">
<corners android:radius="8dp"` />
<solid android:color="#88000000"/>
</shape>
加载圈样式
<animated-rotate
xmlns:android="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
android:pivotX="50%" android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="720">
<shape
android:shape="ring"
android:innerRadiusRatio="3"
android:thicknessRatio="15"
android:useLevel="false">
<gradient
android:type="sweep"
android:useLevel="false"
android:startColor="#55c6c6c6"
android:centerColor="#c6c6c6"
android:centerY="0.50"
android:endColor="#c6c6c6"/>
</shape>
</animated-rotate>
传入样式 new Loading(this,R.style.CustomDialog);
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
使用方法!!!!
private Loading loading;
loading = new Loading(context);
//动画
//loading = new Loading(this,R.style.CustomDialog);
loading.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loading.dismiss();//3秒后关闭
}
}, 3000);
至此完毕