Android项目中使用自定义进度加载Dialog

转载: http://www.androidchina.net/2297.html

1.首先定义动画

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:drawable="@drawable/progess"
    >
</rotate>

2.在布局文件中引入

<ProgressBar
           android:layout_centerInParent="true"
           android:id="@+id/pb"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:indeterminateDrawable="@anim/progress_rotate"
           android:indeterminateDuration="500"
           />   

  但无法达到在项目中使用的便捷性,不可能每一个需要用到此Dialog的地方都需要在相应的xml文件中定义该ProgressBar的控件吧,如果开发中界面使用多层次的FrameLayout和多层次的布局,这就是个麻烦问题了。

下文将改 ProgressBar 单独定义为一个xml,并通过定义单独方法动态将其加入布局中。

1.定义布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_pb"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/progess" />

</LinearLayout>

2.定义旋转动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <rotate
        android:duration="1500"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:repeatMode="restart"
        android:startOffset="-1"
        android:toDegrees="+360" />

</set>

3.定义样式

    <!-- 自定义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:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

4.创建自定义Dialog

    /**
     * 创建自定义ProgressDialog
     */
    public static Dialog showProgress(Context context){
        View view = View.inflate(context,R.layout.progress_diaolog,null);
        LinearLayout ll = (LinearLayout)view.findViewById(R.id.ll_pb);
        ImageView iv = (ImageView)view.findViewById(R.id.iv);

        Dialog d = new Dialog(context,R.style.loading_dialog);
        d.setContentView(ll,new LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
        d.setCancelable(false);
        //设置动画
        Animation a = AnimationUtils.loadAnimation(context,R.anim.progress_rotate);
        iv.startAnimation(a);
        return d;
    }

5.在文件中使用

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //显示
        final Dialog dialog = Utils.showProgress(this);
        dialog.show();

        //模拟联网操作
        new Thread(){
            public void run() {
                SystemClock.sleep(5000);
                dialog.dismiss();
            };
        }.start();
    }

}

  显示5秒后自动消失

时间: 2024-08-04 12:46:14

Android项目中使用自定义进度加载Dialog的相关文章

【vue】vue-cli3构建项目中实现图片懒加载

前两天正好写了文章如何用实现图片懒加载[性能优化]JS实现图片懒加载,今天在使用vue构建项目的时候就遇到了要做图片懒加载的优化需要,本想把前两天的代码直接copy过来的,后来想查查看有没有更简便的方法,果不其然,vue中直接有插件可以使用,看了下实现时候的效果,实现原理都和原生js是一样的,vue果然真香! 接下来我们来讲vue-lazyload插件的使用: 1.安装插件 cnpm i vue-lazyload -S 2.入口文件main.js中配置: import Vue from 'vue

vue-cli项目中引入图片懒加载

1.全局安装vue-lazyload npm install vue-lazyload -g 2.在main.js配置文件引入 import VueLazyload from 'vue-lazyload' Vue.use(VueLazyload, { //预加载高度 preLoad: 1.3, //错误时显示的图片 error: '/static/about111.jpg', //图片加载中显示的图片 loading: '/static/img/loading.gif', //尝试加载次数 at

Windows Service 项目中 Entity Framework 无法加载的问题

Windows Service 项目引用了别的类库项目,别的项目用到了 Entity Framework(通过Nuget引入),但是我的 Windows Service 无法开启,于是我修改了 App.config,加入 EF 的配置信息后能开启,但是业务代码无法进入,通过日志发现错误: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlPro

vue项目中实现图片懒加载的方法

对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载.这样子对于页面加载性能上会有很大的提升,也提高了用户体验. 实现方法(使用vue的vue-lazyload插件) 1.安装插件 npm install vue-lazyload --save-dev 2.在入口文件main.js中引入并使用 import VueLazyload from 'vue-lazyload' 直接使用 Vue.use(VueLazyl

在java项目中配置文件不能被加载

当配置文件有多个时,我们通常的做法是建一个目录将这些配置文件放在该目录下,但是在加载该配置文件时却不能加载,即使路径也写对了, 这是因为项目文件是默认加载src目录,但是我们创建的目录不是在src目录下,看下面的截图 config目录是我用来存放配置文件的目录,这时无论如何修改路径都不能加载成功,这是因为默认加载路径是src,可通过右键项目-----build path---configure build path---source 可查看 通过条件加载路劲就可以实现配置文件的加载    add

如何解决Android中的WebView直接加载网页出错?

笔者开发的一个项目中需要用WebView加载网页,程序运行起来后报以下错误: 这是由于缺少权限,需要在AndroidManifset.xml文件中进行权限设置: 把下边这句话加入该xml文件中, <uses-permission android:name="android.permission.INTERNET" /> 把它做为根节点<manifest>的一个子节点即可.

Android之使用帧动画实现自定义loading加载布局

在项目开发过程中,我们总是需要自定义一些和项目风格类似的loading页面,这时候我们可以考虑使用帧动画来完成这一功能 假如我们要实现如下图所示的帧动画加载效果: 我们可以选取三张帧图片: 具体在帧动画中怎么使用? An AnimationDrawable defined in XML consists of a single <animation-list> element, and a series of nested<item> tags. Each item defines

Android项目中自定义顶部标题栏

Android项目中自定义顶部标题栏 下面给大家详细介绍android中自定义顶部标题栏的思路及实现方式 先来图:     思路及实现步骤 1.定义标题栏布局 2.自定义TitleActivity控制标题栏按钮监听 3.在TitleActivity中实现标题栏以下内容切换 首先定义标题栏 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/

Expo大作战(十三)--expo如何自定义状态了stateBar以及expo中如何处理脱机缓存加载 offline support

简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xd