android 动画效果 translate 详解,包括 Dialog 上方弹出,底部弹出,中间弹出

本文介绍如何使用XML定义动画效果,并将其应用于Android Dialog中,包括从屏幕上方或底部弹出的动画实现方式。提供了具体的代码示例,帮助开发者快速实现自定义Dialog的动画效果。

先给出动画效果代码,可以直接拿去用:

1.上方弹出:

滑入动画( actionsheet_dialog_in):

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromYDelta="-100%"
    android:toYDelta="0" />

滑出动画(actionsheet_dialog_out):

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromYDelta="0"
    android:toYDelta="-100%" />

2.底部弹出:

滑入动画:

<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fromYDelta="100%"
    android:toYDelta="0" />

滑出动画:

<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    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 中的代码:

    <!--位于上方划出dialog的背景-->
    <style name="DialogStyle" parent="@android:style/Theme.Dialog">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <!-- 浮于Activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- Dialog以外的区域模糊效果 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!--点击dialog以外区域关闭弹窗-->
        <item name="android:windowCloseOnTouchOutside">false</item>


        <!-- Dialog进入及退出动画 -->
        <item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
    </style>
    <!-- ActionSheet进出动画 -->
    <style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/actionsheet_dialog_in</item>
        <item name="android:windowExitAnimation">@anim/actionsheet_dialog_out</item>

    </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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值