Android实现网络加载时的对话框功能
程序员文章站
2023-12-20 08:15:16
效果预览
简要说明
现在android程序网络请求操作是必不可少的,然而拥有好的交互体验的程序对网络耗时操作的处理尤为重要。
代码说明:
dialog_load...
效果预览
简要说明
现在android程序网络请求操作是必不可少的,然而拥有好的交互体验的程序对网络耗时操作的处理尤为重要。
代码说明:
dialog_loading.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_view" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <imageview android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:src="@drawable/progress" /> <textview android:id="@+id/tiptextview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:text="数据加载中……" /> </linearlayout>
这个布局就是我们自定义的显示布局,比较简单明了,最外层一个垂直排列的线性布局,里面依次是一个imageview和textview。
loading_animation.xml
<?xml version="1.0" encoding="utf-8"?> <set android:shareinterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:interpolator="@android:anim/linear_interpolator" android:pivotx="50%" android:pivoty="50%" android:fromdegrees="0" android:todegrees="+360" android:duration="1500" android:startoffset="-1" android:repeatmode="restart" android:repeatcount="-1"/> </set>
这个就是我们设置的旋转的属性动画的基本属性操作,这个xml存在于res下的anim文件夹下(手动创建文件夹)
customprogressdialog.class package com.cc.customprogressdialog.util; import android.app.dialog; import android.content.context; import android.graphics.bitmap; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.animation.animation; import android.view.animation.animationutils; import android.widget.imageview; import android.widget.linearlayout; import com.cc.customprogressdialog.r; /** * created by cc on 2017/2/4. */ public class customprogressdialog extends dialog { context context; private imageview spaceshipimage; private animation hyperspacejumpanimation; public customprogressdialog(context context) { super(context); this.context = context; } public customprogressdialog(context context, int theme) { super(context, theme); this.context = context; } @override protected void oncreate(bundle savedinstancestate) { layoutinflater inflater = layoutinflater.from(context); view v = inflater.inflate(r.layout.dialog_loading, null);// 得到加载view linearlayout layout = (linearlayout) v.findviewbyid(r.id.dialog_view);// 加载布局 // main.xml中的imageview spaceshipimage = (imageview) v.findviewbyid(r.id.img); // 加载动画 hyperspacejumpanimation = animationutils.loadanimation(context, r.anim.loading_animation); // 使用imageview显示动画 spaceshipimage.startanimation(hyperspacejumpanimation); setcancelable(false);// 不可以用“返回键”取消 setcontentview(layout, new linearlayout.layoutparams( linearlayout.layoutparams.match_parent, linearlayout.layoutparams.match_parent));// 设置布局 } }
这个类就是自定义的progressdialog,代码的关键步骤我都写了注释。
使用
package com.cc.customprogressdialog; import android.os.asynctask; import android.os.bundle; import android.os.systemclock; import android.support.v7.app.appcompatactivity; import android.view.view; import android.widget.button; import com.cc.customprogressdialog.util.customprogressdialog; public class mainactivity extends appcompatactivity { private button btn; private customprogressdialog mprogressdialog; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btn = (button) findviewbyid(r.id.btn); btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { new asynctask<void, void, void>() { @override protected void onpreexecute() { super.onpreexecute(); mprogressdialog = new customprogressdialog(mainactivity.this, r.style.loading_dialog); mprogressdialog.show(); } @override protected void doinbackground(void... voids) { systemclock.sleep(2000); return null; } @override protected void onpostexecute(void avoid) { super.onpostexecute(avoid); mprogressdialog.dismiss(); } }.execute(); } }); } }
上述代码我们看到我在主activity里面添加一个按钮,实现其点击事件,在点击事件中我创建了一个异步操作,模拟网络耗时。
注意一点我在创建customprogressdialog的时候传入了一个style,系统默认的不给力,所以只能自己写了一个。
<!-- 自定义loading dialog --> <style name="loading_dialog" parent="android:style/theme.dialog"> <item name="android:windowframe">@null</item> <item name="android:windownotitle">true</item> <item name="android:background">#00000000</item> <item name="android:windowbackground">@android:color/transparent</item> <item name="android:windowisfloating">true</item> <item name="android:windowcontentoverlay">@null</item> </style>
属性的参数意思有兴趣的自行百度,在这里不一一介绍了。
实现的代码就这么简单但很实用,希望对各位读者有所帮助。最后附上完整的代码:
http://xiazai.jb51.net/201702/yuanma/customprogressdialog
以上所述是小编给大家介绍的android实现网络加载时的对话框功能,希望对大家有所帮助
推荐阅读
-
Android编程实现捕获程序异常退出时的错误log信息功能详解
-
Android编程实现捕获程序异常退出时的错误log信息功能详解
-
Android中加载网络资源时的优化可使用(线程+缓存)解决
-
Android实现底部弹出的对话框功能
-
Android开发实现ImageView加载摄像头拍摄的大图功能
-
Android使用AlertDialog实现的信息列表单选、多选对话框功能
-
Android实现底部弹出的对话框功能
-
Android中加载网络资源时的优化可使用(线程+缓存)解决
-
Android使用AlertDialog实现的信息列表单选、多选对话框功能
-
Android加载loading对话框的功能及实例代码(不退出沉浸式效果)