Android Dialog從底部彈出和收回

先上個大圖!


1541650702539.gif

先創建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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容