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);
}
});