博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android BaseDialog(开发必备)动画、加载进度、阴影
阅读量:7081 次
发布时间:2019-06-28

本文共 12366 字,大约阅读时间需要 41 分钟。

使用方法

将libray模块复制到项目中,或者直接在build.gradle中依赖:

allprojects {        repositories {                        maven { url 'https://jitpack.io' }        }    }
dependencies {            compile 'com.github.AnJiaoDe:BaseDialog:V1.1.2'    }

注意:如果sync报错,是因为和com.android.tools.build:gradle 3.0有关,

可以改将compile改为implementation 或者api

1.Center

这里写图片描述

2.Left

这里写图片描述

3.Top

这里写图片描述

4.Right

这里写图片描述

5.Bottom

这里写图片描述

6.Progress

这里写图片描述

public class MainActivity extends BaseActivity {    private BaseDialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.btn_center).setOnClickListener(this);        findViewById(R.id.btn_left).setOnClickListener(this);        findViewById(R.id.btn_top).setOnClickListener(this);        findViewById(R.id.btn_right).setOnClickListener(this);        findViewById(R.id.btn_bottom).setOnClickListener(this);        findViewById(R.id.btn_progress).setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.btn_center:                dialog = new BaseDialog(this);                dialog.config(R.layout.dialog_center, true).show();                dialog.findViewById(R.id.tv_confirm).setOnClickListener(this);                dialog.findViewById(R.id.tv_cancel).setOnClickListener(this);                break;            case R.id.btn_left:                BaseDialog dialog_left = new BaseDialog(this);                dialog_left.config(R.layout.dialog_left, 0.5f, Gravity.LEFT | Gravity.CENTER, BaseDialog.AnimInType.LEFT,                        WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.MATCH_PARENT, true).show();                break;            case R.id.btn_top:                BaseDialog dialog_top = new BaseDialog(this);                dialog_top.setOffset(0, ScreenUtils.dpInt2px(this, 48));                dialog_top.config(R.layout.dialog_photo, 0.5f, Gravity.TOP, BaseDialog.AnimInType.TOP,                        WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, true).show();                break;            case R.id.btn_right:                BaseDialog dialog_right = new BaseDialog(this);                dialog_right.setOffset(20, 0);                dialog_right.config(R.layout.dialog_right, Gravity.RIGHT | Gravity.CENTER, BaseDialog.AnimInType.RIGHT,                        WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.MATCH_PARENT, true).show();                break;            case R.id.btn_bottom:                BaseDialog dialog_bottom = new BaseDialog(this);                dialog_bottom.config(R.layout.dialog_photo, Gravity.BOTTOM, BaseDialog.AnimInType.BOTTOM, true).show();                break;            case R.id.btn_progress:                CYProgressDialog cyProgressDialog=new CYProgressDialog(this);                cyProgressDialog.config(0.4f,0xffffffff,20,0xffffffff,0xff2a5caa).show();                break;            case R.id.tv_confirm:                dialog.dismiss();                break;            case R.id.tv_cancel:                dialog.dismiss();                break;        }    }}

源码:

BaseDialog

public class BaseDialog extends Dialog {    public BaseDialog(Context context) {        this(context, 0);    }    public BaseDialog(Context context, int themeResId) {        super(context, themeResId);        requestWindowFeature(Window.FEATURE_NO_TITLE);// 去除对话框的标题        getWindow().setBackgroundDrawableResource(R.drawable.dialog_bg);//设置对话框边框背景,必须在代码中设置对话框背景,不然对话框背景是黑色的        setDimAmount(0.2f);    }    /*             */    public BaseDialog config(@LayoutRes int layoutResID, boolean canceledOnTouchOutside) {        config(layoutResID, 0.2f, Gravity.CENTER, AnimInType.CENTER, WindowManager.LayoutParams.MATCH_PARENT,                WindowManager.LayoutParams.WRAP_CONTENT, canceledOnTouchOutside);        return this;    }    /*             */    public BaseDialog config(@NonNull View view, boolean canceledOnTouchOutside) {        config(view, 0.2f, Gravity.CENTER, AnimInType.CENTER, WindowManager.LayoutParams.MATCH_PARENT,                WindowManager.LayoutParams.WRAP_CONTENT, canceledOnTouchOutside);        return this;    }    /*             */    public BaseDialog config(@LayoutRes int layoutResID, int gravity, AnimInType animInType, boolean canceledOnTouchOutside) {        config(layoutResID, 0.2f, gravity, animInType, WindowManager.LayoutParams.MATCH_PARENT,                WindowManager.LayoutParams.WRAP_CONTENT, canceledOnTouchOutside);        return this;    }    /*             */    public BaseDialog config(@NonNull View view, int gravity, AnimInType animInType, boolean canceledOnTouchOutside) {        config(view, 0.2f, gravity, animInType, WindowManager.LayoutParams.MATCH_PARENT,                WindowManager.LayoutParams.WRAP_CONTENT, canceledOnTouchOutside);        return this;    }    /*             */    public BaseDialog config(@LayoutRes int layoutResID, int gravity, AnimInType animInType,                             int width, int height, boolean canceledOnTouchOutside) {        config(layoutResID, 0.2f, gravity, animInType, width, height, canceledOnTouchOutside);        return this;    }    /*             */    public BaseDialog config(@NonNull View view, int gravity, AnimInType animInType,                             int width, int height, boolean canceledOnTouchOutside) {        config(view, 0.2f, gravity, animInType, width, height, canceledOnTouchOutside);        return this;    }    /*           参数:dimAmount背景阴影            */    public BaseDialog config(@LayoutRes int layoutResID, float dimAmount, int gravity, AnimInType animInType,                             int width, int height, boolean canceledOnTouchOutside) {        setContentView(layoutResID);//填充对话框布局        setDimAmount(dimAmount);        getWindow().setGravity(gravity);        setAnimType(animInType);        getWindow().setLayout(width, height);        setCanceledOnTouchOutside(canceledOnTouchOutside ? true : false);        return this;    }    /*           参数:dimAmount背景阴影            */    public BaseDialog config(@NonNull View view, float dimAmount, int gravity, AnimInType animInType,                             int width, int height, boolean canceledOnTouchOutside) {        setContentView(view);//填充对话框布局        setDimAmount(dimAmount);        getWindow().setGravity(gravity);        setAnimType(animInType);        getWindow().setLayout(width, height);        setCanceledOnTouchOutside(canceledOnTouchOutside ? true : false);        return this;    }    /*           参数:dimAmount背景阴影            */    public BaseDialog config(@NonNull View view, @Nullable ViewGroup.LayoutParams params, float dimAmount, int gravity, AnimInType animInType,                             int width, int height, boolean canceledOnTouchOutside) {        setContentView(view, params);//填充对话框布局        setDimAmount(dimAmount);        getWindow().setGravity(gravity);        setAnimType(animInType);        getWindow().setLayout(width, height);        setCanceledOnTouchOutside(canceledOnTouchOutside ? true : false);        return this;    }    /*    动画类型     */    public BaseDialog setAnimType(AnimInType animInType) {        if (animInType == AnimInType.CENTER) {            getWindow().setWindowAnimations(R.style.dialog_zoom);            return this;        }        if (animInType == AnimInType.LEFT) {            getWindow().setWindowAnimations(R.style.dialog_anim_left);            return this;        }        if (animInType == AnimInType.TOP) {            getWindow().setWindowAnimations(R.style.dialog_anim_top);            return this;        }        if (animInType == AnimInType.RIGHT) {            getWindow().setWindowAnimations(R.style.dialog_anim_right);            return this;        }        if (animInType == AnimInType.BOTTOM) {            getWindow().setWindowAnimations(R.style.dialog_anim_bottom);            return this;        }        return this;    }    public void setOffset(int x, int y) {        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();        layoutParams.x = x;        layoutParams.y = y;    }    public float getDimAmount() {        return getWindow().getAttributes().dimAmount;    }    /*    设置背景阴影,必须setContentView之后调用才生效     */    public BaseDialog setDimAmount(float dimAmount) {        WindowManager.LayoutParams lp = getWindow().getAttributes();        lp.dimAmount = dimAmount;        return this;    }    /*    动画类型     */    public enum AnimInType {        CENTER(0),        LEFT(2),        TOP(4),        RIGHT(3),        BOTTOM(1);        AnimInType(int n) {            intType = n;        }        final int intType;    }}

CYProgressDialog

public class CYProgressDialog extends BaseDialog {    private MaterialProgressDrawable mProgress;    private ValueAnimator valueAnimator;    public CYProgressDialog(Context context) {        super(context);        setCanceledOnTouchOutside(false);    }    /**     * @param color_iv     * @param radius_iv     * @param color_bg_progress     * @param colors_progress     * @return     */    public CYProgressDialog config(int color_iv, float radius_iv, int color_bg_progress, int... colors_progress) {        config(0.2f, color_iv, radius_iv, color_bg_progress, colors_progress);        return this;    }    public CYProgressDialog config(float dimAmount, int color_iv, float radius_iv, int color_bg_progress, int... colors_progress) {        FrameLayout frameLayout = new FrameLayout(getContext());        CircleImageView imageView = new CircleImageView(getContext(), color_iv, radius_iv);        mProgress = new MaterialProgressDrawable(getContext(), imageView);        mProgress.setBackgroundColor(color_bg_progress);        //圈圈颜色,可以是多种颜色        mProgress.setColorSchemeColors(colors_progress);        //设置圈圈的各种大小        mProgress.updateSizes(MaterialProgressDrawable.DEFAULT);        mProgress.showArrow(false);        imageView.setImageDrawable(mProgress);        frameLayout.addView(imageView);        valueAnimator = valueAnimator.ofFloat(0f, 1f);        valueAnimator.setDuration(600);        valueAnimator.setInterpolator(new DecelerateInterpolator());        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                float n = (float) animation.getAnimatedValue();                //圈圈的旋转角度                mProgress.setProgressRotation(n * 0.5f);                //圈圈周长,0f-1F                mProgress.setStartEndTrim(0f, n * 0.8f);                //箭头大小,0f-1F                mProgress.setArrowScale(n);                //透明度,0-255                mProgress.setAlpha((int) (255 * n));            }        });        getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);        setContentView(frameLayout);        setDimAmount(dimAmount);        setOnKeyListener(new OnKeyListener() {            @Override            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {                    hide();                    return true;                }                return false;            }        });        return this;    }    @Override    public void show() {        super.show();        if (mProgress == null) return;        mProgress.start();        if (valueAnimator == null) return;        valueAnimator.start();    }    @Override    public void hide() {        super.hide();        if (mProgress == null) return;        mProgress.stop();        if (valueAnimator == null) return;        valueAnimator.cancel();    }    public void setBackgroundColor(int color) {        if (mProgress == null) return;        mProgress.setBackgroundColor(color);    }    public void setColorSchemeColors(int... colors) {        if (mProgress == null) return;        mProgress.setColorSchemeColors(colors);    }}

关注专题

转载地址:http://ttvml.baihongyu.com/

你可能感兴趣的文章
tomcat启动报错Invalid character found in method name. HTTP method names must be tokens
查看>>
appium+python3.6
查看>>
RAID cache的作用及更换RAID 电池注意事项
查看>>
如何挖掘和优化长尾关键词?
查看>>
windows下安装解压版mysql
查看>>
Linux启用ssh服务
查看>>
Centos7 Snapper快照备份
查看>>
cdn
查看>>
每一天的成长由此开始
查看>>
swift开发中如何将时间显示为几分钟前、几小时前、几天前、几个月前
查看>>
某店订单系统水平分库的实践之路以及关键步骤
查看>>
Oracle GoldenGate 快速安装配置实用指南
查看>>
我的友情链接
查看>>
iOS 图片合并 及截图
查看>>
easyui datagrid load 方法键不能为变量的解决
查看>>
分治的一次简单实践
查看>>
博为峰Java面试题-JavaSE I/O之File写入读出
查看>>
USER username (Login failed): Invalid shell: '/bin/false'
查看>>
我的友情链接
查看>>
Linux下整合Apache和Tomcat
查看>>