欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

安卓三种动画之一View Animation与 案例 为活动的载入与退出添加动画

程序员文章站 2024-01-19 09:36:46
安卓三种动画之一View Animation与 案例 为活动的载入与退出添加动画View Animation(视图动画)View动画的概述及种类在活动中加载这个动画View动画的属性详解View Animation(视图动画)View动画的概述及种类视图动画的作用对象是View,支持四种动画效果,分别是平移动画,缩放动画,旋转动画,透明度动画。譬如,我们可以对TextView设置其文本的移动,旋转,缩放,透明。视图动画可以通过XML或通过代码动态创建,对于视图动画建议使用XML文件定义,因为它具有更...

View Animation(视图动画)

View动画的概述及种类

视图动画的作用对象是View,支持四种动画效果,分别是平移动画,缩放动画,旋转动画,透明度动画。譬如,我们可以对TextView设置其文本的移动,旋转,缩放,透明。

视图动画可以通过XML或通过代码动态创建,对于视图动画建议使用XML文件定义,因为它具有更高的可读性,可重用性。

名称 标签 子类 效果
平移动画 < translate > TranslateAnimation 移动View
缩放动画 < scale > ScaleAnimation 放大或缩小View
旋转动画 < rotate > RotateAnimation 旋转view
透明度动画 < alpha > Alpha 改变View的透明度

要使用View动画,首先要创建XML文件,我们需要在res下新建anim文件夹,接着在anim下创建animation resource file的xml文件,我们举例为view_anim.xml
我们通过xml文件来了解它们各自的语法:

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!--平移动画标签-->
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="20%p"
        android:fromYDelta="0%p"
        android:toYDelta="20%p"
        android:duration="4000"/>
    <!--缩放动画标签-->
    <scale
        android:fromXScale="1.0"
        android:toXScale="0.2"
        android:fromYScale="1.0"
        android:toYScale="0.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="4000"/>
    <!--旋转动画标签-->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="4000"/>
    <!--透明度动画标签-->
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.2"
        android:duration="4000"/>
</set>

从上面的代码我们知道,View动画既可以是单个动画,也可以有一系列动画组成。

这是因为View动画的四种种类分别对应着Animation的四个子类(TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation),除了以上四个子类它还有一个AnimationSet类,对应xml标签为,它是一个容器,可以包含若干个动画,并且内部也可以继续嵌套集合的。

在活动中加载这个动画

由工具类AnimationUtils中的方法,获得一个Animation 对象。
loadAnimation()需要两个形参,一个是要加载到的context, 一个是动画的来源文件。

 Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.viewanimation);
 textView.startAnimation(animation);

注意:无论是在什么地方,需要加载一个动画都是要加载或者引用一个xml文件

View动画的属性详解

Animation属性详解:

xml属性 java方法 解释
android:duration setDuration(long) 动画持续时间,毫秒为单位
android:ShareInterpolator setInterpolator(Interpolator) 设定插值器(指定的动画效果,譬如回弹等)
android:fillAfter setFillAfter(boolean) 控件动画结束时是否保持动画最后的状态
android:fillBefore setFillBefore(boolean) 控件动画结束时是否还原到开始动画前的状态
android:repeatMode setRepeatMode(int) 重复类型有两个值,reverse表示倒序回放,restart表示从头播放
android:startOffset setStartOffset(long) 调用start函数之后等待开始运行的时间,单位为毫秒

TranslateAnimation属性详解:

xml属性 java方法 解释
android:fromXDelta TranslateAnimation(float fromXDelta, …) 起始点X轴坐标,数值,百分比,百分比p,注[^1]
android:fromYDelta TranslateAnimation(…, float fromYDelta, …) 起始点Y轴从标,同上规律
android:toXDelta TranslateAnimation(float fromXDelta, …) 结束点X轴坐标,同上规律
android:toYDelta TranslateAnimation(…, float toYDelta) 结束点Y轴坐标,同上规律

注①: 数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点。

RotateAnimation属性,ScaleAnimation属性详解:
与TranslateAnimation基本相似,只是多了一个android:pivotX性质,该性质表示缩放起点X坐标(相当于缩放的中点X坐标)

AnimationSet属性详解:

AnimationSet继承自Animation,是上面四种的组合容器管理类,没有自己特有的属性,他的属性继承自Animation,所以特别注意,当我们对set标签使用Animation的属性时会对该标签下的所有子控件都产生影响。譬如我们在set标签下加入duration=“1000”,子控件的duration属性会失效。

为活动的载入与退出添加全局动画

要想给全部的活动添加动画,要在style文件中的<style name=“AppTheme” 添加一个子标签
<item name=“android:windowAnimationStyle” …
该标签传入的是传入的是继承@android:style/Animation.Activity的style标签

<item name="android:windowAnimationStyle">@style/AnimationActivity</item>

在同一文件下,新建一个style标签,并且在其对于活动退出和进入的子标签中,传入相应的动画xml文件

<style name="AnimationActivity" parent="@android:style/Animation.Activity">
<!--        打开activity时,新进入的activity执行的动画, 传入的值是一个资源文件-->
        <item name="android:activityOpenEnterAnimation">@anim/open_enter</item>
        <!--        打开activity时,退出的activity执行的动画, 传入的值是一个资源文件-->
        <item name="android:activityOpenExitAnimation">@anim/open_exit</item>
        <!--        关闭activity时,进入的activity执行的动画, 传入的值是一个资源文件-->
        <item name="android:activityCloseEnterAnimation">@anim/close_enter</item>
        <!--        关闭activity时,退出的activity执行的动画, 传入的值是一个资源文件-->
        <item name="android:activityCloseExitAnimation">@anim/close_exit</item>



    </style>

在res下新建anim文件夹,接着在anim下创建4个animation resource file的xml文件。
安卓三种动画之一View Animation与 案例 为活动的载入与退出添加动画

活动跳转时的动画错乱问题

<item name=“android:windowAnimationStyle” 这一属性的动画过渡效果是通过task栈的插入和弹出来进行的。
当跳转活动时,intent添加了一些标识符,干扰了正常的task栈的插入和弹出,就会出现动画错乱的问题。
解决方法:通过Activity类的public void overridePendingTransition(int enterAnim, int exitAnim)手动指定活动的进出动画。注意,该方法只能在startActivity(intent)之后调用。

 public static void logout(Context context){
        Intent intent = new Intent(context, LoginActivity.class);
//        添加intent标识符,清理activity返回栈,并且新生成task栈
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
        ((Activity)context).overridePendingTransition(R.anim.open_enter,R.anim.open_exit);
    }

本文地址:https://blog.csdn.net/Barryjacket/article/details/108974516

相关标签: android