自定义Dialog以及Dialog之间跳转

需求:注册分两步完成,每一步都是一个dialog

关键点:

  1. 自定义dialog
  2. dialog跳转样式

ps:这里实现可能不是最佳方案,因为我并没有去根据屏幕大小去设置dialog的大小

效果
自定义Dialog以及Dialog之间跳转_第1张图片

自定义Dialog以及Dialog之间跳转_第2张图片

自定义dialog

/** * Created by ${wj} , * on 2015/8/11 0011. */
public class PhoneRegisterDialog extends Dialog{

    private Context mContext;

    public PhoneRegisterDialog(Context context, int theme) {
        super(context, theme);
        this.mContext=context;
    }

    public PhoneRegisterDialog(Context context) {
        this(context, R.style.myDialog);
        this.mContext=context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_phone_register);
        //点击dialog外无法关闭dialog
        setCancelable(false);

        ButterKnife.bind(this);
        this.getWindow().setWindowAnimations(R.style.dialog_anim);

    }

    @OnClick(R.id.next) void next(){
        this.dismiss();
        RegisterDialog registerDialog=new RegisterDialog(getContext());
        registerDialog.show();
    }

里面用到两个知识,一个是设置dialog的主题样式,一般都是如下设置

 <style name="myDialog" parent="Theme.AppCompat.Light.Dialog">
        <!-- 背景颜色及透明程度 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 是否有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowFrame">@null</item>
    </style>

另外一个是dialog跳转的动画this.getWindow().setWindowAnimations(R.style.dialog_anim);

<style name="dialog_anim">
        <item name="android:windowEnterAnimation">@anim/right_in</item>
        <item name="android:windowExitAnimation">@anim/left_out</item>
    </style>

right.in的动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate android:fromXDelta="800" android:toXDelta="0" android:duration="500" />

   <!-- <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="800"/>-->

    <!--<scale android:fromXScale="0.2" android:toXScale="1.0" android:fromYScale="0.2" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="500" android:interpolator="@android:anim/accelerate_interpolator"/>-->

</set>

left.out.xml的动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate android:fromXDelta="0" android:toXDelta="-400" android:duration="500" />

   <!-- <alpha android:fromAlpha="1.0" android:toAlpha="0.5" android:duration="500"/>-->

    <!--<scale android:fromXScale="1.0" android:toXScale="0.2" android:fromYScale="1.0" android:toYScale="0.2" android:pivotX="50%" android:pivotY="50%" android:duration="500" android:interpolator="@android:anim/accelerate_interpolator"/>-->

</set>

如果我们希望可以根据屏幕大小设置dialog的宽度。通常这样做,给dialog设置onShowListener
自定义Dialog以及Dialog之间跳转_第3张图片

具体里面的实现通常是这样,这个是群里一个朋友的通常写法
自定义Dialog以及Dialog之间跳转_第4张图片

ps:其实刚开始想用FragmentDialog实现的,但是很多地方还是不太会处理,放弃了!

欢迎留言讨论!

你可能感兴趣的:(自定义Dialog以及Dialog之间跳转)