• Android自定义类似ProgressDialog效果的Dialog


    Android自定义类似ProgressDialog效果的Dialog.

    方法如下:

    1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景)。

    如我要的效果:

    2.定义loading_dialog.xml布局文件(这里你也可以按自己的布局效果定义,关键是要有个imageView):

    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/dialog_view"   
    4.     android:orientation="vertical"  
    5.     android:layout_width="fill_parent"   
    6.     android:layout_height="fill_parent"  
    7.     android:minHeight="60dp"  
    8.     android:minWidth="180dp"  
    9.     android:gravity="center"  
    10.     android:padding="10dp"  
    11.     android:background="@drawable/loading_bg">  
    12.     <ImageView   
    13.         android:id="@+id/img"  
    14.         android:layout_width="wrap_content"   
    15.         android:layout_height="wrap_content"   
    16.         android:src="@drawable/publicloading"  
    17.         />  
    18.     <TextView   
    19.         android:id="@+id/tipTextView"  
    20.         android:layout_width="wrap_content"   
    21.         android:layout_height="wrap_content"  
    22.         android:layout_marginLeft="10dp"  
    23.         android:text="数据加载中……" />  
    24. </LinearLayout>  

    3.定义一个loadingDialog中imageView转动的动画:loading_animation.xml

    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android">  
    3.     <rotate   
    4.         android:interpolator="@android:anim/linear_interpolator"  
    5.         android:pivotX="50%"  
    6.         android:pivotY="50%"  
    7.         android:fromDegrees="0"  
    8.         android:toDegrees="+360"  
    9.         android:duration="1500"  
    10.         android:startOffset="-1"  
    11.         android:repeatMode="restart"  
    12.         android:repeatCount="-1"/>  
    13. </set>  

    4.定义dialog的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:windowBackground">@drawable/loading_bg</item>  
            <item name="android:windowIsFloating">true</item>  
            <item name="android:windowContentOverlay">@null</item>  
        </style>  
    [java] view plaincopy
     

    5.写点创建Dialog的代码,你可以自己封装成一个方法。

    /** 
         * 得到自定义的progressDialog 
         * @param context 
         * @param msg 
         * @return 
         */  
        public static Dialog createLoadingDialog(Context context, String msg) {  
      
            LayoutInflater inflater = LayoutInflater.from(context);  
            View v = inflater.inflate(R.layout.loading_dialog, null);// 得到加载view  
            LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加载布局  
            // main.xml中的ImageView  
            ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);  
            TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字  
            // 加载动画  
            Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(  
                    context, R.anim.load_animation);  
            // 使用ImageView显示动画  
            spaceshipImage.startAnimation(hyperspaceJumpAnimation);  
            tipTextView.setText(msg);// 设置加载信息  
      
            Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog  
      
            loadingDialog.setCancelable(false);// 不可以用“返回键”取消  
            loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(  
                    LinearLayout.LayoutParams.FILL_PARENT,  
                    LinearLayout.LayoutParams.FILL_PARENT));// 设置布局  
            return loadingDialog;  
      
        }  
     


    最后来张整体的效果图:

     -------------------------------------------------------------------------------------------------------------------------------------

    上一篇写了使用系统ProgressBar实现的稍微好看的ProgressDialog,如果你想自己的ProgressDialog更具有自己的风格,那用图片去实现,将会达到你的目的。

    话不多说,先看效果:

    看了上篇以后,实现这个也是很简单的,只需要把布局文件的ProgressBar换成ImageView就可以了。

    换成ImageView以后,我们需要让这个ImageView动起来,这就需要对它进行一个anim处理。

    实现思路是:用一个动画代替ImageView的图片资源,然后让动画动起来就OK了。

    将这个资源当作ImageView的背景图片

     
    <?xml version="1.0" encoding="utf-8"?>  
    <animation-list  
        xmlns:android="http://schemas.android.com/apk/res/android"     
        android:oneshot="false">  
        <item android:drawable="@drawable/icon_loading1" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading2" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading3" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading4" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading5" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading6" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading7" android:duration="100"/>  
        <item android:drawable="@drawable/icon_loading8" android:duration="100"/>  
    </animation-list>  

    然后就要在MyProgressDialog类里面让动画启动了

     
    ImageView imageView = (ImageView) progressDialog.findViewById(R.id.loadImg);  
            AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();  
            animationDrawable.start();  


    完成这些,然后就可以在Activity里面调用我们的MyProgressDialog了。

    为了方便,给大家附上我的图片资源,希望能用得上



  • 相关阅读:
    java设计模式之单例模式
    nginx搭建反向代理服务器详解
    java利用MultipartRequest的getFileName方法不能得到原文件名问题
    window.onload 和doucument.ready执行顺序
    Access control allow origin 简单请求和复杂请求
    bootstrap栅格系统中同行div高度不一致的解决方法
    C# web Api ajax发送json对象到action中
    winserver 08 64位安装sql05 64位提示asp版本注册
    MVC 添加Area
    SQL添加维护 计划失败
  • 原文地址:https://www.cnblogs.com/niray/p/3857253.html
Copyright © 2020-2023  润新知