先上个大图!
先创建anim文件夹,在文件夹中加入in_bottom.xml和out_bottom.xml进入和退出动画文件
在in_bottom.xml文件写入:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0"/>
</set>
在out _bottom.xml文件写入:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%p"/>
</set>
这样我们就创建了两个动画文件,然后在style.xml文件引用着两个文件。
(./res/values文件下有styles文件就直接添加下面代码,没有styles文件就先创建这个文件)
<style name="BottomInAndOutStyle">
<item name="android:windowEnterAnimation">@anim/in_bottom</item>
<item name="android:windowExitAnimation">@anim/out_bottom</item>
</style>
创建好这三个文件之后我们就有动画效果的style 了
创建一个abstract类,作为一个基类,以后有类似从底部弹出dialog需求方便扩展。
public abstract class BottomDialogBase extends Dialog {
public BottomDialogBase(Context context) {
super(context);
init();
}
protected void init(){
Window win = this.getWindow();
win.requestFeature(Window.FEATURE_NO_TITLE);
onCreate();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.windowAnimations = R.style.BottomInAndOutStyle;
lp.gravity = Gravity.BOTTOM;
win.setAttributes(lp);
win.setBackgroundDrawableResource(android.R.color.transparent);
}
protected abstract void onCreate();
}
基类就这么多东西了,然后就是使用方法。开始时候那个图片的弹窗效果就是用下面这个类完成的
public class BottomDialogDemo extends BottomDialogBase implements
View.OnClickListener{
public BottomDialogDemo(Context context) {
super(context);
}
@Override
protected void onCreate() {
setContentView(R.layout.dialog_bottom_demo);
findViewById(R.id.dialog_ok).setOnClickListener(this);
}
@Override
public void onClick(View v) {
dismiss();
}
}
调用的时候只需要
BottomDialogDemo dialog = new BottomDialogDemo(context);
dialog.show();