先上個大圖!
先創(chuàng)建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>
這樣我們就創(chuàng)建了兩個動畫文件,然后在style.xml文件引用著兩個文件辨萍。
(./res/values文件下有styles文件就直接添加下面代碼田晚,沒有styles文件就先創(chuàng)建這個文件)
<style name="BottomInAndOutStyle">
<item name="android:windowEnterAnimation">@anim/in_bottom</item>
<item name="android:windowExitAnimation">@anim/out_bottom</item>
</style>
創(chuàng)建好這三個文件之后我們就有動畫效果的style 了
創(chuàng)建一個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();
}
}
調(diào)用的時候只需要
BottomDialogDemo dialog = new BottomDialogDemo(context);
dialog.show();