View动画效果:

1.>>Tween动画
通过对View的内容进行一系列的图形变换(平移、缩放、旋转、透明度变换)实现动画效果,补间动画需要使用<set>节点作为根节点,子节点里可以为下表格中的四种动画标签,也可以包继续含<set>标签;动画的定义xml文件需要添加到res/anim文件夹中;

动画类型 Xml定义动画使用的节点 编码定义动画使用的类
渐变透明度动画效果 <alpha/> AlphaAnimation
渐变尺寸缩放动画效果 <scale/> ScaleAnimation
画面位置移动动画效果 <translate/> TranslateAnimation
画面旋转动画效果 <rotate/> RotateAnimation
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"     android:shareInterpolator="false" ><alphaandroid:duration="5000"android:fromAlpha="1.0"<!-- 1代表可见,0代表不可见 -->android:toAlpha="0" ><!-- 持续时间duration --></alpha><rotateandroid:duration="5000"android:fromDegrees="0"android:pivotX="50%" // 旋转参考点android:pivotY="50%" // 旋转参考点android:toDegrees="180" ></rotate><scaleandroid:duration="5000"android:fromXScale="1"android:fromYScale="1"android:pivotX="50%"android:pivotY="50%"android:toXScale="5"android:toYScale="5" /><!-- 动画开始时的比例大小,结束时的比例,缩放参考点 --><translateandroid:duration="5000"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="50"android:toYDelta="50" /><!-- 从(0,0)到(50,50) -->
</set>

在java代码中设置开始动画:

 Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);// 使用rotate.xml生成动画效果对象animation.setFillAfter(true);// 动画停止时保持在该动画结束时的状态 ImageView.startAnimation(animation); Animation animation1 = new RotateAnimation(0, 270, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);// 编码方式

2.>>Frame动画,即顺序播放事先做好的图像,开发步骤:
(1)把定义好的图片放进项目res/drawable下;
(2)在项目的res目录下创建anim文件夹,在此文件夹下定义动画xml文件,每一项静态的图像添加到drawable目录中,或者用编码方式定义动画效果;
(3)为View控件绑定动画效果,调用代表动画的AnimationDrawable的start()方法开始动画;

        TextView tv = (TextView) findViewById(R.id.tv);tv.setBackgroundResource(R.drawable.frame);// 绑定frame动画,会发送一个消息到主线程的消息队列处理器等待处理,绑定事件完成之后才能进行动画启动final AnimationDrawable drawable = (AnimationDrawable) findViewById(R.id.tv).getBackground();// Looper().myQueue():取得消息队列,要消息(事件)处理完成之后才执行addIdleHandler添加进的handler中的方法
        Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {@Overridepublic boolean queueIdle() {drawable.start();// 启动动画,要绑定事件处理完成之后才能启动动画return false;// 只要执行操作之后就会从消息队列中移出
                    }});// 取得处理主线程中处理的消息队列

注意: Frame动画必须使用<animation-list>作为根节点,下面是frame.xml文件的定义;

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true" ><!-- 动画只播放一次 --><item android:drawable="@drawable/a1" android:duration="500"></item> <!--第一项为一个静态的图像--><item android:drawable="@drawable/a2" android:duration="500"></item><item android:drawable="@drawable/a3" android:duration="500"></item>
</animation-list>

3.>>属性动画
属性动画可以使对象的属性值在一定时间间隔内变化到某一个值,如在1000毫秒内移动控件的位置(改变x,y的值),在0.5秒内改变alpha属性的值以改变控件透明度,属性动画资源文件位于res/animator目录中;如下是一个属性动画的定义

<set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="sequentially" > // 动画执行顺序,默认是同时执行,在此设置为按顺序执行<set> // 定义x,y的值在0.5秒内移动到(400,300) 在此未设置android:ordering属性,此set则为同时执行<objectAnimatorandroid:duration="500"android:propertyName="x"android:valueTo="400"android:valueType="intType" /><objectAnimatorandroid:duration="500"android:propertyName="y"android:valueTo="300"android:valueType="intType" /></set><objectAnimatorandroid:duration="500"android:propertyName="alpha"android:valueTo="1f" />
</set>

加载属性动画资源文件:

        // 加载动画资源AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.aim);// 设置要控制的对象set.setTarget(null);set.start();

4.>>LayoutAnimaionController

LayoutAnimaionController为Layout或者viewGroup里的控件设置动画效果,特点是它会使其中的每个控件都有相同的动画效果,这些控件的动画效果可以在不同的时间显示出来。

        mLayout = (LinearLayout) findViewById(R.id.ll);Animation anim = new TranslateAnimation(0, 200, 0, 0);anim.setDuration(500);anim.setFillAfter(true);LayoutAnimationController layoutAnim = new LayoutAnimationController(anim); // 设置动画layoutAnim.setOrder(LayoutAnimationController.ORDER_NORMAL); // 设置子View动画顺序mLayout.setLayoutAnimation(layoutAnim);

关于LayoutAnimaionController,它需要一个Animation对象用于实例化,可以设置子View动画顺序,有三种顺序方式

LayoutAnimaionController .ORDER_NORMAL       // 顺序
LayoutAnimaionController .ORDER_REVERSE     //反序
LayoutAnimaionController .ORDER_RANDOM      //随机

还可以设置延迟setDelay(param);

5.>>Interpolator动画速率

/*** An interpolator defines the rate of change of an animation. This allows* the basic animation effects (alpha, scale, translate, rotate) to be * accelerated, decelerated, repeated, etc.*/
public interface Interpolator extends TimeInterpolator {}

查看接口Interpolator的定义,Interpolator接口定义动画改变的速度,如基本的动画效果(透明度、比例、移动、旋转)的加速、减速、重复等;

/*** TimeInterpolator定义动画速率的改变,允许动画有非固定的运动如加速、减速*/
public interface TimeInterpolator {/*** @param input 一个介于0到1的参数标识当前点的位置,0代表开始,1代表结束* @return 返回一个动画补插值.这个值可以小于1{在目标的后面}或大于1{在目标的后面} */float getInterpolation(float input);
}

Android已经定义了几个该接口的直接子类,在程序中可以直接调用
——AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
——DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。
——CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。
——Anticipate/Overshoot:往起点方向偏移少量距离再开始加速动画/往终点方向偏移少量距离再结束动画。
——Bounce:弹性效果。
——AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。
——LinearInterpolator:动画从开始到结束,变化率是线性变化。

<set xmlns:android="http://schemas.android.com/apk/res/android"android:shareInterpolator="true" > <!--表明在下面的动画中分享Interpolator--><scaleandroid:duration="100"android:fillAfter="false"android:fromXScale="0.5"android:fromYScale="0.5"android:interpolator="@android:anim/accelerate_interpolator"android:pivotX="50%"android:pivotY="50%"android:startOffset="-50"android:toXScale="1.2"android:toYScale="1.2" />
</set>

上面是使用系统自带的Interpolator的方法,也可以自定义Interpolator

public class MyInter implements Interpolator {// ...
    @Overridepublic float getInterpolation(float input) {// ...return 0;}// ...
}

在使用的时候,使用如下的方式;

        ImageView iv = new ImageView(getContext());Animation animation = AnimationUtils.loadAnimation(getContext(), 0x70982743);animation.setInterpolator(new MyInter());iv.startAnimation(animation);

Activity切换动画效果:
  关于Activity切换动画效果,网上比较普遍的是overridePendingTransition(enterAnim, exitAnim),但这种方式其实有一些问题;例如:被打开的Activity退出时,并没有动画效果;并且,如果需要当前Activity销毁返回到前一个Activity时,当前Activity和前一个Activity都执行动画,这种方法就根本不能满足了。

  言归正传,直接上我淘到的方法:通过Theme对Activity动画效果进行设置

    <style name="AppTheme" parent="@android:style/Theme"><!-- 设置activity切换动画 --><item name="android:windowAnimationStyle">@style/activityAnimation</item></style><!-- animation 样式 --><style name="activityAnimation" parent="@android:style/Animation"><item name="android:activityOpenEnterAnimation">@anim/slide_right_in</item><item name="android:activityOpenExitAnimation">@anim/slide_left_out</item><item name="android:activityCloseEnterAnimation">@anim/slide_left_in</item><item name="android:activityCloseExitAnimation">@anim/slide_right_out</item></style>

上面activityAnimation下面四个item对应的动画分别为(假设从Activity A 进入到Activity B):

进入B时B执行的动画;
进入B时A执行的动画;
离开B返回A时A执行的动画;
离开B返回A时B执行的动画;

两个google官方参考链接:
http://developer.android.com/reference/android/R.attr.html
http://developer.android.com/reference/android/R.styleable.html#WindowAnimation

 

转载于:https://www.cnblogs.com/a284628487/p/3053494.html

Android 动画之View动画效果和Activity切换动画效果相关推荐

  1. Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)

    原文:Android项目实战(四):ViewPager切换动画(3.0版本以上有效果) 学习内容来自"慕课网" 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换 ...

  2. android activity切换动画

    今天,实在没有什么可以写的内容,在网上找了好久,才决定写今天的内容.自己还是想保持每天写博客的习惯. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左 ...

  3. Android自定义Activity切换动画完全解析

    Android自定义Activity切换动画完全解析 在Android开发中,Activity之间的切换是最常见的业务场景了,而且系统默认的Activity之间的切换都是带动画效果的(右进右出).但是 ...

  4. Android 编程下设置 Activity 切换动画

    为 Activity 设置切换动画 我们知道,我们可以在 AndroidManifest.xml 文件中,通过 android:theme 属性设置 Activity 的主题.主题中定义了关于 Act ...

  5. Activity切换动画---点击哪里从哪放大

    本篇文章已授权微信公众号 安卓巴士Android开发者门户 独家发布 emmmm,这次来梳理一下 Activity 切换动画的研究.首先,老规矩,看一下效果图: 效果图 这次要实现的动画效果就是类似于 ...

  6. 安卓设置Activity切换动画无效的问题

    做安卓App时,常会设置Activity之间切换的动画.常用的方法有两种,一种是用Activity的overridePendingTransition方法:另一种是用style文件通过xml进行设置. ...

  7. [Android1.5]Android2.0版本以下Activity切换动画效果

    前言 在Android 2.0版本以上做Activity切换时的动画效果是很容易的,可以调用overridePendingTransition函数,一行代码搞定,当然配置动画效果的xml文件是少不了的 ...

  8. Android开发中activity切换动画的实现

    (1)我们在MainAcitvity中定义两个textview,用于点击触发切换Activity事件,下面是布局文件代码. <LinearLayoutandroid:layout_width=& ...

  9. [android] 练习样式主题自定义activity切换动画

    主要练习了自定义样式和主题,继承android系统默认的样式并修改,练习xml定义淡入淡出动画 anim/fade_in.xml <?xml version="1.0" en ...

最新文章

  1. vuex ajax dev,vuex中使用ajax的话如何维护状态?
  2. 获取web.py上面的示例code
  3. 天兔安装手册-第一篇文章
  4. leetcode95. 不同的二叉搜索树 II(递归)
  5. 消防荷载楼板按弹性还是塑性计算_第二节 消防登高面、消防救援场地和灭火救援窗...
  6. 小米9尴尬了!红米K20搭载骁龙855或只卖2599元
  7. 腾讯员工平均月薪7万?腾讯回应:完全不能这么算
  8. vivado快速下载及解压安装教程
  9. python识别图片表格内容
  10. linux系统下安装wrk和使用
  11. 啊~北京~~啊~首都~
  12. 卖油的都开始卖菜了,打败你的往往不是对手
  13. phpwind database.php,phpwind中的数据库操作类
  14. 径向基函数网络初认识
  15. 记安装win10和deepin双系统的经过(附一些常见问题和解决方案)
  16. 读书笔记--交流电的瞬时值和有效值
  17. 蓝牙耳机南卡和JBL哪款好用?半入耳耳机南卡和JBL详细对比评测
  18. 【Hexo】nexT主题使用攻略基础——添加分类、标签及关于
  19. iOS---自动释放池
  20. ​​​​青春不常在,我与python“谈恋爱”

热门文章

  1. IntelliJ IDEA 更新后,电脑卡成球,该如何优化?
  2. 一套基础自动化部署搭建过程
  3. Spring Boot + Vue + Shiro 实现前后端分离、权限控制
  4. 怎么样做一个合格而又可爱的面试官
  5. 深入理解XGBoost,优缺点分析,原理推导及工程实现
  6. 15年!NumPy论文终出炉,还登上了Nature
  7. 想让语音助手听懂方言,这个数据集或能帮你?
  8. Python标准库asyncio模块基本原理浅析
  9. m个足球放入n个篮子中或者放苹果问题
  10. 小时候的小霸王游戏!坦克大战 超级玛丽 魂斗罗 忍者神龟 都有!