android 补间(Tween)动画

xiaoxiao2021-02-27  318

android 补间(Tween)动画

 如果动画中的图像变换的比较有规律时,可能采用自动生图中间图像的方式来生成动画,例如图像的移动、旋转、缩放等。补间动画的优点是可以节省空间。 一、移动补间动画 可以通过配置动画文件(xml文件)或java代码来实现补间动画的移动效果。补间动画文件需要放在res\anim目录下。假设在res\anim目录下有一个动画文件test.xml,该文件内容如下: <translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:fromXDelta="-320" android:toXDelta="320" android:fromYDelta="0" android:toYDelta="0" android:duration="5000" /> 1,android:interpolator:表示动画渲染器。 accelerate_interpolator动画加速器。动画在开始时最慢,然后逐渐加速。 decelerate_interpolator动画减速器。动画在开始时最快,然后逐渐减速。 accelerate_decelerate_interpolator动画加减速器。动画在开始和结束时速度最慢,但在前半部分时开始加速,在后半部分时开始减速。 2,android:fromXDelta 动画起始位置的X坐标。 android:toXDelta 动画结束位置的X坐标。 android:fromYDelta 动画起始位置的Y坐标。 android:toYDelta 动画结束位置的Y坐标。 android:duration 动画的持续时间,单位是毫秒。 装载补间动画 装载补间动画文件需要使用AnimationUtils.loadAnimation方法。 装载text.xml文件的代码如下: Animation animation = AnimationUtils.loadAnimation(this, R.anim.test); animation.setRepeatCount(Animation.INFINITE);//循环显示。 应用补间动画 假设有一个EditText组件(editText),将test.xml文件中设置的补间动画应用到EditText组件上的方式有两种: (1) 使用EditText类的startAnimation方法: editText.startAnimation(animation); (2)使用Animation类的start方法: //绑定补间动画 editText.setAnimation(animation); //开始动画 animation.start(); 如果想在该动画结束后运行别的动画或者别的操作,那么需要在AnimationListener接口的onAnimationEnd方法中完成。下面的例子就是在炮弹动画运行结束后,将其隐藏,然后再播放炸弹效果的动画和声音: public void onAnimationEnd(Animation animation) { //在投放炸弹动画结束之后。。。。 ivBlast.setVisibility(View.VISIBLE); ivMissile.setVisibility(View.INVISIBLE); try { //开始播放爆炸的声音 MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.bomb); mediaPlayer.stop(); mediaPlayer.prepare(); mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } 下面的例子是,小球落到地面后又弹起的动画: public void onAnimationEnd(Animation animation) { if(animation.hashCode() == animationBottom.hashCode()){ imageView.startAnimation(animationTop); }else if(animation.hashCode() == animationTop.hashCode()){ imageView.startAnimation(animationBottom); } } animationDrawable.stop(); animationDrawable.start(); } 二、缩放补间动画 <scale xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="5000"> </scale> android:pivotX 表示沿X轴方向缩放的支点位置。 android:pivotY 表示沿Y轴方向缩放的支点位置。 都为50%时,表示支点在中心位置。 三、旋转补间动画 <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim near_interpolator" android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1000" android:repeatMode="restart" android:repeatCount="infinite"/> android:repeatCount 设置旋转的次数,值为-1或者infinite时,表示补间动画永不停止。0表示一次。 android:repeatMode 设置重复的模式。默认是restart。当repeatCount的值大于0或者为infinite时才有效。 还可以设成reverse,表示偶数次显示动画时会做与动画文件定义的方向相反的方向动行。 四、透明补间动画 <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="1.0" android:toAlpha="0.1" android:duration="2000" /> 五、多种补间动画一起应用 <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="1.0" android:toAlpha="0.1" android:duration="2000" /> <translate android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="-380" android:duration="2000" /> <scale android:interpolator="@android:anim/accelerate_interpolator" android:fromXScale="1.0" android:toXScale="0.2" android:fromYScale="1.0" android:toYScale="0.2" android:pivotX="50%" android:pivotY="50%" android:duration="2000" /> < t> set标签中定义的动画会在同一时间开始运行。。。 六、振动效果 cycle_interpolator是振动动画渲染器。由于该渲染器未在系统中定义,需要自己编写cycle_interpolator.xml文件,并将该文件放在res\anim目录中。内容如下: <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="18" /> android:cycles 表示振动因子。值越大,振动的越剧烈。 下面来创建一个动画文件shake.xml。如下: <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:fromYDelta="0" android:toYDelta="0" android:duration="3000" android:interpolator="@anim cle_interpolator" /> 开始振动效果的代码如下: animation = AnimationUtils.loadAnimation(this, R.anim.shake); imageView = (ImageView) findViewById(R.id.shake_image); imageView.startAnimation(animation);
转载请注明原文地址: https://www.6miu.com/read-5227.html

最新回复(0)