底部dialog通用弹窗

来源:互联网 发布:java多线程实现同步 编辑:程序博客网 时间:2024/06/05 06:54

需求

拍照底部弹窗选择器

效果

这里写图片描述

实现原理

自定义dialog 加底部弹出动画 加回调

step1

public class ChoosePicDialog implements View.OnClickListener {    Activity mActivity;    /**     * 下面都是弹出框选择图片的内容     *     */    private Button btnPictureStorage;    private Button btnTakePhoto;    private Button btnCancel;    private OnChoseListener mOnChoseListener;    public interface OnChoseListener {        void onTakePhoto(); //去拍照        void onPicAlbum(); //去开启图库    }    public ChoosePicDialog(Activity activity,OnChoseListener onChoseListener) {        this.mActivity = activity;        this.mOnChoseListener = onChoseListener;        showDialog();    }    private Dialog mDialog;  //更换头像弹出框    /*弹出框,选择头像*/    private void showDialog() {        View view = View.inflate(mActivity, R.layout.photo_choose_dialog, null);        btnPictureStorage = (Button) view.findViewById(R.id.btn_picture_storage);        btnTakePhoto = (Button) view.findViewById(R.id.btn_take_photo);        btnCancel = (Button) view.findViewById(R.id.btn_cancel);        /**设置点击事件*/        btnPictureStorage.setOnClickListener(this);        btnTakePhoto.setOnClickListener(this);        btnCancel.setOnClickListener(this);        mDialog = new Dialog(mActivity, R.style.transparentFrameWindowStyle);        mDialog.setContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,                ViewGroup.LayoutParams.WRAP_CONTENT));        Window window = mDialog.getWindow();        // 设置显示动画        window.setWindowAnimations(R.style.main_menu_animstyle);        WindowManager.LayoutParams wl = window.getAttributes();        wl.x = 0;        wl.y = mActivity.getWindowManager().getDefaultDisplay().getHeight();        // 以下这两句是为了保证按钮可以水平满屏        wl.width = ViewGroup.LayoutParams.MATCH_PARENT;        wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;        // 设置显示位置        mDialog.onWindowAttributesChanged(wl);        // 设置点击外围解散        mDialog.setCanceledOnTouchOutside(true);        mDialog.show();    }    /**     * dialog点击事件,开启 相机,图库,取消     */    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.btn_picture_storage://图库                mOnChoseListener.onPicAlbum();                mDialog.dismiss();                break;            case R.id.btn_take_photo: //拍照                mOnChoseListener.onTakePhoto();                mDialog.dismiss();                break;            case R.id.btn_cancel://取消                mDialog.dismiss();                break;        }    }}

step2

<?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="match_parent"              android:background="#00000000"              android:gravity="bottom"              android:orientation="vertical"              android:padding="5dip" >    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@drawable/photo_gallery_selector"        android:paddingBottom="10dip"        android:paddingTop="10dip"        android:id="@+id/btn_picture_storage"        android:text="图库"        android:textSize="16sp" />    <TextView        android:layout_width="match_parent"        android:layout_height="0.5dip"        android:background="#DAD9DB" />    <Button        android:id="@+id/btn_take_photo"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@drawable/photo_camera_selector"        android:paddingBottom="10dip"        android:paddingTop="10dip"        android:text="拍照"        android:textSize="16sp" />    <Button        android:id="@+id/btn_cancel"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="5dip"        android:background="@drawable/photo_cancel_selector"        android:paddingBottom="10dip"        android:paddingTop="10dip"        android:text="取消"        android:textSize="16sp" /></LinearLayout>

style
transparentFrameWindowStyle

    <!--选择头像动画-->    <style name="transparentFrameWindowStyle" parent="android:style/Theme.Dialog">        <item name="android:windowBackground">@drawable/photo_choose_bg</item>    </style>

main_menu_animstyle

    <style name="main_menu_animstyle">        <item name="android:windowEnterAnimation">@anim/photo_dialog_in_anim</item>        <item name="android:windowExitAnimation">@anim/photo_dialog_out_anim</item>    </style>

两个方向透明动画
photo_dialog_in_anim

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="500"        android:fromXDelta="0"        android:fromYDelta="1000"        android:toXDelta="0"        android:toYDelta="0" /></set>

photo_dialog_out_anim

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" ><translate    android:duration="500"    android:fromXDelta="0"    android:fromYDelta="0"    android:toXDelta="0"    android:toYDelta="1000" /></set>

step3

具体使用

       new ChoosePicDialog(this, new ChoosePicDialog.OnChoseListener() {            @Override            public void onTakePhoto() { //去拍照            }            @Override            public void onPicAlbum() {//去打开相册            }};
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 康洁橱柜 康洁洗涤公司 康洁洗衣怎么样 康洁洗衣连锁 康洁分类洗衣 康洁洗衣店连锁 康洁橱柜怎么样 康洁洗涤有限公司 康洁洗衣连锁店 康洁洗衣价格 宜家橱柜怎么样 欧派橱柜多少钱一米 欧派橱柜好吗 博洛尼橱柜怎么样 科勒橱柜怎么样 方太橱柜怎么样 康洋 康海保温杯 康涤 康源 康源公寓 康源高效卵磷脂价格 康熙 康熙儿子 康熙太子妃 康熙通宝 康熙的儿子 我是康熙爷 康熙大帝 康熙皇后 康熙皇帝 康熙的皇后 少年康熙 康熙容妃 康熙罗汉钱 康熙父亲 康熙的妃子 康熙母亲 康熙雍正 康熙简介 康熙和乾隆