Tween动画

1.Tween动画简介:Tween动画主要通过进行图形矩阵变换,camera投影,和透明度变换来实现动画效果。
主要实现有以下四个子类
AlphaAnimation:明暗变换动画
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000"
/>
</set>
ScaleAnimation:图像缩放动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale
          android:interpolator="@android:anim/accelerate_decelerate_interpolator"
         
          android:fromXScale="0.5"
          android:toXScale="1.0"
         
          android:fromYScale="0.5"
          android:toYScale="1.0"
         
          android:pivotX="175"
          android:pivotY="118"
         
          android:fillAfter="false"
          android:duration="500" />
</set>
TranslateAnimation:移动动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="10"
android:toXDelta="100"
android:fromYDelta="10"
android:toYDelta="100"
android:duration="1000"
/>
</set>
RotateAnimation:旋转动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
       
<rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       
        android:fromDegrees="0"
        android:toDegrees="+360"
               
        android:pivotX="350"
        android:pivotY="235"    
        
        android:duration="1000" />
</set>
2.属性说明
android:duration="2000"//动画时长,毫秒
android:fromAlpha="0.1"//开始透明度
android:toAlpha="1.0"//结束透明度
android:fromXScale="0.5"//坐标x开始比例
android:toXScale="1.0"//坐标x结束比例
android:fromYScale="0.5"//坐标y开始比例
android:toYScale="1.0"//坐标y结束比例
android:pivotX="175"//坐标轴心,在旋转和缩放使用该属性
android:pivotY="118"
android:fromXDelta="10"//位移动画x和y坐标开始和结束点
android:toXDelta="100"
android:fromYDelta="10"
android:toYDelta="100"
android:fillAfter="false"//是否把view放在结束位置
android:interpolator//指定动画插入器,常见动画插入器:
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果
3.效果组合,可以在配置文件中组合各种动画,透明度变化和旋转变化组合如下:
<set
        xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
                android:fromAlpha="0.1"
                android:toAlpha="1.0"
                android:duration="2000" />
        <rotate
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"

                android:fromDegrees="0"
                android:toDegrees="+360"

                android:pivotX="350"
                android:pivotY="235"

                android:duration="2000" />
</set>
4.使用动画
        1.新建Animation对象,可查看不同Animation类的构造函数,新建,并设置相关值,如动画时长
        2.通过布局文件构造动画:animaTemp = AnimationUtils.loadAnimation(context, R.anim.push_up_out_not_alpha);布局文件如我前面给的例子
        3.开始动画:View.startAnimation可以开始一个view的动画
5.动画原理,理解动画的原理先要理解android view的树形结构,android中的每个view都是建立在父view上的除了activity的rootview外,每个view在调用完自己的draw方法后,会调用dispatchDraw通知调用子view的绘制,Animation就是通过设定绘制子view不断变化的坐标位置,view大小,透明度等,并且在动画时间内不断重复绘制子view,实现动画效果,view的透明度变化是通过设置alpha值,而图像变化是通过animation的变换矩阵实现的,Animation.getMatrix可获取动画的变换矩阵,对变换矩阵进行变换,就可以达到动画效果。
6.自定义Tween动画,有时候需要实现一些特殊的效果,上面四种动画都不能够实现,就需要自定义Animation类,实现applyTransformation方法,对alpha值进行设置,和对变换矩阵进行变化,
7.投影变换,getMatrix获取的Matrix矩阵只能够进行缩放,xy移动旋转,不能够进行3d效果的一些变换,要实现3d效果的变换,就需要使用Camera类对矩阵进行3d投影变换,如z轴平移,x,y,z轴旋转。
如apidemos中Rotate3dAnimation进行y轴旋转变化:
 final Camera camera = mCamera;

        final Matrix matrix = t.getMatrix(); 
       

        camera.save();
        if (mReverse) {
            camera.translate(0, degrees,0f);
        } else {
            camera.translate(0, degrees, 0f);
        }
        camera.getMatrix(matrix);
        camera.restore();
8.动画顺序组合,有时候需要先后多个动画实现效果,如Rotate3dAnimation中画面的3d旋转,旋转到90度的时候需要切换动画这个时候就需要进行动画顺序组合,这个是通过动画生命周期监听器来实现的,该监听器需要实现接口Animation.AnimationListener,Animation通过调用方法setAnimationListener设置监听器:
 private final class DisplayNextView implements Animation.AnimationListener {
        private final int mPosition;

        private DisplayNextView(int position) {
            mPosition = position;
        }

        public void onAnimationStart(Animation animation) {
                //动画开始
        }

        public void onAnimationEnd(Animation animation) {
                //动画结束
            mContainer.post(new SwapViews(mPosition));
        }

        public void onAnimationRepeat(Animation animation) {
                //动画重复播放时
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值