底部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() {//去打开相册 }};
阅读全文