自定义dialog

Posted Gradle官方文件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义dialog相关的知识,希望对你有一定的参考价值。

完整代码请看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;
        
    
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于自定义dialog的主要内容,如果未能解决你的问题,请参考以下文章

怎么自定义dialog样式

自定义Dialog

自定义dialog可动态更新吗

自定义控件(Dialog篇)

自定义控件(Dialog篇)

自定义Dialog以及Dialog返回值到Activity