需求
拍照底部彈窗選擇器
效果
實現原理
自定義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() {//去打開相冊
}
};