关闭

自定义dialog

标签: 自定义dialog仿美团动画安卓开发dialog
106人阅读 评论(0) 收藏 举报
分类:

完整代码请看github:https://github.com/anzhuojinjie/MeiTuanDialog
在drawable文件夹中创建frame_meituan动画资源xml文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    //帧动画的自动执行:oneshot  。 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
    <item android:drawable="@drawable/progress_loading_image_01"
           android:duration="150"/>
    <item android:drawable="@drawable/progress_loading_image_02"
        android:duration="150"/>
</animation-list>

创建dialog的layout文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">

    <ImageView
        android:id="@+id/iv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/frame_meituan"/>

    <TextView
        android:id="@+id/tv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/iv_loading"
        android:layout_centerHorizontal="true"
        android:textSize="20sp"
        android:text="正在加载中.." />

</RelativeLayout>

自定义dialog

package com.hsg.meituandialog;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Joe on 2017/1/3.
 */

public class MyDialog extends ProgressDialog {
    private Context mContext;
    private String mLoadingTip;
    private ImageView iv_loading;
    private TextView tv_loading;
    private AnimationDrawable mAnimation;

    public MyDialog(Context context,String content) {
        super(context);
        this.mContext = context;
        this.mLoadingTip = content;
    }

    /**
     * ProgressDialog不是ViewGroup,自定义布局通过setContentView方法加载进来自定义布局。要重写onCreate
     * 对话框创建的时候调用
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setCancelable(false);//设置点击屏幕不能消失
        initview();
        initdata();
    }

    private void initview() {
        setContentView(R.layout.progress_dialog);
        iv_loading = ((ImageView) findViewById(R.id.iv_loading));
        tv_loading = ((TextView) findViewById(R.id.tv_loading));
    }

    private void initdata() {
        // 通过ImageView对象拿到背景显示的AnimationDrawable
        mAnimation = ((AnimationDrawable) iv_loading.getBackground());
        //主界面点击登录,立即调用这里的动画显示功能
        mAnimation.start();
        //设置正在加载中信息
        tv_loading.setText(mLoadingTip);
    }

    @Override
    public void dismiss() {
        super.dismiss();
        //对话框关闭,同时关闭掉动画。节约资源
        mAnimation.stop();
        mAnimation = null;
    }
}

调用

public class MainActivity extends AppCompatActivity {
    private MyDialog myDialog;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0x01:
                    myDialog.dismiss();
                    Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
        }
    };

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

    public void btnClick(View view) {
        switch (view.getId()){
            case R.id.btn_loading_start:
                myDialog = new MyDialog(this,"正在登录。。。");
                myDialog.show();
                handler.sendEmptyMessageDelayed(0x01,5000);
                break;
            default:
                break;
        }
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13651次
    • 积分:545
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:5篇
    • 译文:0篇
    • 评论:4条
    最新评论