zoukankan      html  css  js  c++  java
  • LoaderDialog自定义加载框的实现

    package com.loaderman.loadingdialogdemo;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Handler;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.RotateAnimation;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    /**
     * LoadingDialog.java
     */
    
    public class LoadingDialog extends Dialog {
        private static final int  CHANGE_TITLE_WHAT        = 1;
        private static final int  CHNAGE_TITLE_DELAYMILLIS = 300;
        private static final int  MAX_SUFFIX_NUMBER        = 3;
        private static final char SUFFIX                   = '.';
    
        private ImageView       iv_route;
        private TextView        tv;
        private TextView        tv_point;
        private RotateAnimation mAnim;
        private boolean cancelable = true;
    
        private Handler handler = new Handler() {
            private int num = 0;
    
            public void handleMessage(android.os.Message msg) {
                if (msg.what == CHANGE_TITLE_WHAT) {
                    StringBuilder builder = new StringBuilder();
                    if (num >= MAX_SUFFIX_NUMBER) {
                        num = 0;
                    }
                    num++;
                    for (int i = 0; i < num; i++) {
                        builder.append(SUFFIX);
                    }
                    tv_point.setText(builder.toString());
                    if (isShowing()) {
                        handler.sendEmptyMessageDelayed(CHANGE_TITLE_WHAT, CHNAGE_TITLE_DELAYMILLIS);
                    } else {
                        num = 0;
                    }
                }
            }
    
            ;
        };
    
        public LoadingDialog(Context context) {
            super(context, R.style.Dialog_bocop);
            init();
        }
    
        private void init() {
            View contentView = View.inflate(getContext(), R.layout.activity_custom_loding_dialog_layout, null);
            setContentView(contentView);
    
            contentView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (cancelable) {
                        dismiss();
                    }
                }
            });
            iv_route = (ImageView) findViewById(R.id.iv_route);
            tv = (TextView) findViewById(R.id.tv);
            tv_point = (TextView) findViewById(R.id.tv_point);
            initAnim();
            //getWindow().setWindowAnimations(R.anim.alpha_in);
        }
    
    
        private void initAnim() {
            mAnim = new RotateAnimation(360, 0, Animation.RESTART, 0.5f, Animation.RESTART, 0.5f);
            mAnim.setDuration(2000);
            mAnim.setRepeatCount(Animation.INFINITE);
            mAnim.setRepeatMode(Animation.RESTART);
            mAnim.setStartTime(Animation.START_ON_FIRST_FRAME);
        }
    
        @Override
        public void show() {
            iv_route.startAnimation(mAnim);
            handler.sendEmptyMessage(CHANGE_TITLE_WHAT);
            super.show();
        }
    
        @Override
        public void dismiss() {
            mAnim.cancel();
            super.dismiss();
        }
    
    
        @Override
        public void setCancelable(boolean flag) {
            cancelable = flag;
            super.setCancelable(flag);
        }
    
        @Override
        public void setTitle(CharSequence title) {
            tv.setText(title);
        }
    
        @Override
        public void setTitle(int titleId) {
            setTitle(getContext().getString(titleId));
        }
    }
    
    package com.loaderman.loadingdialogdemo;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
        LoadingDialog dialog;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_custom_loding_dialog_main);
            dialog = new LoadingDialog(this);
        }
        public void btnClick(View v) {
            dialog.show();
        }
    }
    

     在res/anim文件下新建alpha_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="1000"
           android:fromAlpha="0.0"
           android:toAlpha="1.0"
        >
    </alpha>
    

      在res/layout文件下新建activity_custom_loding_dialog_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:background="@android:color/white"
                    android:orientation="vertical">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/bt_pay_selector"
            android:onClick="btnClick"
            android:paddingLeft="10dip"
            android:paddingRight="10dip"
            android:text="show Dialog"
            android:textColor="@android:color/white"/>
    
    
    </RelativeLayout>
    

       在res/layout文件下新建activity_custom_loding_dialog_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:gravity="center">
    
        <LinearLayout
            android:layout_width="220dp"
            android:layout_height="220dp"
            android:layout_gravity="center"
            android:background="@drawable/dialog_bocop_loaing_bg"
            android:orientation="vertical">
    
            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="2"
                android:gravity="center">
    
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:padding="3dp"
                    android:src="@mipmap/ic_launcher"/>
    
                <ImageView
                    android:id="@+id/iv_route"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/dialog_bocop_loading_rotate_anim_img"/>
            </RelativeLayout>
    
            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:gravity="center_horizontal">
    
                <TextView
                    android:id="@+id/tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_toLeftOf="@+id/tv_point"
                    android:ellipsize="marquee"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="正在加载"
                    android:textColor="#6F6868"
                    android:textSize="20sp"
                    />
    
                <TextView
                    android:id="@+id/tv_point"
                    android:layout_width="20dp"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:text="..."
                    android:textColor="#6F6868"
                    android:textSize="20sp"/>
            </RelativeLayout>
        </LinearLayout>
    
    </LinearLayout>
    

     效果图:

  • 相关阅读:
    早该知道的7个JavaScript技巧
    ASP.NET 实现伪静态网页方法
    Nginx http大文件断点续传分块上传
    java http大文件断点续传分块上传
    B/S http大文件断点续传上传
    前端 http大文件断点续传上传
    百度WebUploader http大文件断点续传上传
    webuploader http大文件断点续传上传
    ceph 之recovery machhine
    docker private registry使用
  • 原文地址:https://www.cnblogs.com/loaderman/p/6477273.html
Copyright © 2011-2022 走看看