先给出动画效果代码,可以直接拿去用:
1.上方弹出:
滑入动画( actionsheet_dialog_in):
滑出动画(actionsheet_dialog_out):
2.底部弹出:
滑入动画:
android:duration="200"
android:fromYDelta="100%"
android:toYDelta="0" />
滑出动画:
android:duration="200"
android:fromYDelta="0"
android:toYDelta="100%" />
以上是动画效果,下面是解析:
1.首先了解下手机屏幕的坐标系,左上角为原点(如下图),往右是 X 轴正方向,往下是 Y 轴正方向;
2.其次了解 translate 的内部三个属性:
fromXDelta , fromYDelta 起始时 X ,Y 座标,屏幕右下角的座标是 X : 320 ,Y : 480
toXDelta ,toYDelta 动画结束时 X , Y 的座标
duration 是动画的时间,单位为毫秒
在这些属性里面还可以加上%和p,例如:
android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。
android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。
到此为止, 对translate应该有简单的了解并且可以写出一些简单的动画效果。下面给出三种动画效果应用到 dialog 的 style 中的代码:
actionsheet_dialog_in 和 actionsheet_dialog_out 分别为划入划出的动画效果,里面改为自己想要的动画样式即可,
不加动画效果是默认为从中间弹出;
下面是自定义dialog的代码(直接在 onCreateView 方法中调用即可,从上方弹出为 wlp.gravity = Gravity.TOP;
从下方弹出改为 wlp.gravity = Gravity.BOTTOM; 从中间弹出改为 wlp.gravity = Gravity.CENTER; )
private Dialog dialog;
private View inflate;
...(中间无关代码省略)
//自定义dialog
private void showDialog() {
dialog = new Dialog(getActivity(),R.style.DialogStyle);
inflate = LayoutInflater.from(getActivity()).inflate(R.layout.show_dialog,null);
//弹窗点击周围空白处弹出层自动消失弹窗消失(false时为点击周围空白处弹出层不自动消失)
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(inflate);
Window window = dialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.TOP;
wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(wlp);
dialog.show();//显示dialog
}
更多好内容戳下面:
https://blog.csdn.net/wuqingsen1