Android实现加载圈
作者:阿毅同学 发布时间:2023-03-27 16:44:34
标签:Android,加载圈
开发过程中经常用到加载圈,特别是车机开发由于外设不同很多操作响应的等待时长经常要用到不同的加载圈。
首先,直接上菊花效果图,这是我直接从项目里面截取下来的。
核心代码
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CircularLoading {
/**
* 显示Dialog
* @param context 上下文对象
* @param msg 提示内容
* @param isCancelable 是否可以点击取消
* @return
*/
public static Dialog showLoadDialog(Context context, String msg, boolean isCancelable) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.circular_loading, null);
RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.dialog_bg);
// main.xml中的ImageView
ImageView loadImage = (ImageView) v.findViewById(R.id.load_iv);
TextView pointTextView = (TextView) v.findViewById(R.id.point_tv);
// 加载动画
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(context, R.anim.rotating_animation);
// 使用ImageView显示动画
loadImage.startAnimation(hyperspaceJumpAnimation);
pointTextView.setText(msg);
Dialog loadingDialog = new Dialog(context, R.style.TransDialogStyle);
loadingDialog.setContentView(layout);
loadingDialog.setCancelable(isCancelable);
loadingDialog.setCanceledOnTouchOutside(false);
Window window = loadingDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setGravity(Gravity.CENTER);
window.setAttributes(lp);
window.setWindowAnimations(R.style.PopWindowAnimStyle);
loadingDialog.show();
return loadingDialog;
}
/**
* 关闭dialog
*/
public static void closeDialog(Dialog mCircularLoading) {
if (mCircularLoading != null && mCircularLoading.isShowing()) {
mCircularLoading.dismiss();
}
}
}
布局文件
circular_loading.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_bg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
android:minHeight="60dp"
android:minWidth="150dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/load_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:src="@drawable/dialog_loading_img" />
<TextView
android:id="@+id/point_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="0dp"
android:layout_toRightOf="@+id/load_iv"
android:ellipsize="middle"
android:singleLine="true"
android:textSize="16sp" />
</RelativeLayout>
动画
rotating_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<rotate
android:duration="1000"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="-1"
android:repeatMode="restart"
android:toDegrees="360" />
dialog_show.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="0"
android:toAlpha="1.0"/>
</set>
dialog_hide.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1.0"
android:toAlpha="0"/>
</set>
Style
</style>
<style name="TransDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.5</item>
<item name="android:windowFullscreen">true</item>
</style>
</style>
<style name="PopWindowAnimStyle">
<item name="android:windowShowAnimation">@anim/dialog_show</item>
<item name="android:windowHideAnimation">@anim/dialog_hide</item>
</style>
使用方法
//显示
mCircularLoading = CircularLoading.showLoadDialog(Dvr_Activity_Main.this, "加载中...", true);
//关闭
CircularLoading.closeDialog(mCircularLoading);
来源:https://blog.csdn.net/niu9799/article/details/80826680


猜你喜欢
- 第三方jar包在开发工具中引入后编译没问题, 启动调试包括打包时会提示找不到jar包的错误.需要上传到maven仓库中,并在pom文件内引入
- 相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;就像我们平时去超市买
- 默认情况下,如果应用以 Android Q 为目标平台,则在访问外部存储设备中的文件时会进入过滤视图。应用可以使用 Context.getE
- 简述在仿写豆瓣的时候,发现了根据评分不同,星级数也不同的星级条。百度一搜,发现Android有自带控件UIRatingBar,而iOS得要自
- 使用 fragmentLayout 实现,可以把小红点添加到任意 view 上。效果 添加小红点到 textview 上添加小红点到 ima
- .NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using Sys
- 引言float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近
- 端口设置和contextpath的配置端口设置Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicato
- 一、实验题目二、分析实验要求为:实现一个界面,界面中包含一个文本显示区和两个按钮(存档和读档)读档按钮作用是打开文件并读取内容,将内容显示在
- 小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/fra
- 平时开发中经常遇到的很小的问题,这里记录一下。一般在AndroidManifest.xml中添加了android:windowSoftInp
- 一、常见问题所有的final修饰的字段都是编译期常量吗?如何理解private所修饰的方法是隐式的final?说说final类型的类如何拓展
- 本文实例为大家分享了C#实现订单管理程序的具体代码,供大家参考,具体内容如下订单管理的控制台程序,能够实现添加订单、删除订单、修改订单、查询
- 本文实例讲述了Android通过json向MySQL中写入数据的方法。分享给大家供大家参考,具体如下:先说一下如何通过json将Androi
- 最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同
- 下面是一些我找到Android的ADB有用的命令。可以手动或使用自动构建和测试过程。查看设备adb devices如果多个设备连接则使用 u
- 哈希表(HashMap)hash查询的时间复杂度是O(1)按值传递Character,Short,Integer,Long, Float,D
- 访问Controller返回400BadRequest问题SpringMVC使用自定义类型接收参数时, form提交会返回400 Bad R
- 二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出
- Java爬取图片现在开始学习爬虫,对于爬虫的入门来说,图片相对来说是比较容易获取的,因为大部分图片都不是敏感数据,所以不会遇到什么反爬措施,