DialogUtil:相机、相册的选择

styles.xml

<resources>

    <!--DialogView-->
    <style name="main_menu_animstyle">
        <item name="android:windowEnterAnimation">@anim/anim_in</item>
        <item name="android:windowExitAnimation">@anim/anim_out</item>
    </style>
    <style name="transparentFrameWindowStyle" parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/bg_dialog_window</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

anim_in.xml

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

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="1000"
        android:toXDelta="0"
        android:toYDelta="0" />

</set>

anim_out.xml

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

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="1000" />

</set>

bg_btn.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">

    <item android:drawable="@drawable/btn_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/btn_normal" />

</selector>

bg_dialog_window.xml

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

    <solid android:color="#00000000" />

    <corners android:radius="20dip" />

    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />

</shape>

layout_dialog_camera.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:padding="@dimen/dp_10"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_camera"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_btn"
        android:text="拍照" />

    <Button
        android:id="@+id/btn_photo"
        android:layout_marginTop="@dimen/dp_10"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_btn"
        android:text="相册" />
</LinearLayout>

DialogView.java

import android.app.Activity;
import android.app.Dialog;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.example.R;

public final class DialogView {

    public Activity activity;
    public Dialog dialog;
    public View view;

    public DialogView(Activity activity) {
        super();
        this.activity = activity;
    }

    /**
     * @param resource 布局文件xml
     * @param them     样式style 0为缺省
     */
    public Dialog initDialog(int resource, int them) {
        if (them == 0) {
            dialog = new Dialog(activity, R.style.transparentFrameWindowStyle);
        } else {
            dialog = new Dialog(activity, them);
        }

        view =  activity.getLayoutInflater().inflate(resource, null);
        dialog.setContentView(view);
        dialog.setCanceledOnTouchOutside(true);
        Window win = dialog.getWindow();
        win.getDecorView().setPadding(0, 0, 0, 0);

        return dialog;
    }

    public Dialog getDialog() {
        return dialog;
    }

    public View getView() {
        return view;
    }

    /**
     * 显示带动画效果对话框
     */
    public void showAnimationDialog() {
        //设置弹出框从下到上显示动画
        setAnimstyle();
        // 设置点击外围解散
        showNormalDialog();
    }

    /**
     * 设置弹出框从下到上显示动画
     */
    private void setAnimstyle() {
        Window window = dialog.getWindow();

        // 设置显示动画
        window.setWindowAnimations(R.style.main_menu_animstyle);
        WindowManager.LayoutParams wl = window.getAttributes();
        wl.x = 0;
        wl.y = activity.getWindowManager().getDefaultDisplay().getHeight();

        // This makes the dialog take up the full width
        wl.width = WindowManager.LayoutParams.MATCH_PARENT;
        // 设置显示位置
        dialog.onWindowAttributesChanged(wl);
    }

    /**
     * 显示普通对话框
     */
    public void showNormalDialog() {
        if (dialog != null && !isShowing()) {
            // 设置点击外围解散
            dialog.setCanceledOnTouchOutside(true);
            dialog.show();
        }
    }

    /**
     * 判断 dialog 是否为显示状态
     * @return
     */
    public boolean isShowing() {
        return dialog.isShowing();
    }

    /**
     * dialog 隐藏
     */
    public void dismiss() {
        if (dialog != null && isShowing()) {
            dialog.dismiss();
        }
    }
}

DialogUtil.java

import android.app.Activity;
import android.view.View;
import android.widget.Button;
import com.example.R;
import com.example.DialogView;

public class DialogUtil {

    private DialogUtil(){

    }

    public static void showDialog(Activity activity){
        showDialog(activity, R.layout.layout_dialog_camera);
    }

    public static void showDialog(Activity activity, int resLayout){
        // 构建 dialog 实例
        final DialogView dialog = new DialogView(activity);
        // 设置 dialog 要显示的布局
        dialog.initDialog(resLayout, 0);
        // 获取 dialog 要展示的View
        View view = dialog.getView();
        Button btn_camera = (Button)view .findViewById(R.id.btn_camera);
        btn_camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showToast("拍照");
            }
        });

        Button btn_photo = (Button)view .findViewById(R.id.btn_photo);
        btn_photo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showToast("相册");
                dialog.dismiss();
            }
        });

        // 展示这个Dialog
        dialog.showAnimationDialog();
    }
}

MainActivity.java

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogUtil.showDialog(MainActivity.this);
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值