Android Dialog从底部弹出和收回

2017-05-09  本文已影响1932人  必将独行

先上个大图!


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文件下有style文件就直接添加下面代码,没有style文件就先创建这个文件)

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

上一篇下一篇

猜你喜欢

热点阅读