補間動畫就是隻須要定義動畫開始和結束的位置,動畫中間的變化由系統去補齊。android
補間動畫由一下四種方式:app
1.AplhaAnimation——透明度動畫效果ide
2.ScaleAnimation ——縮放動畫效果動畫
3.TranslateAnimation——位移動畫效果this
4.RotateAnimation——旋轉動畫效果spa
AplhaAnimation的參數:code
fromAlpha:動畫開始時的透明度,0.0表示徹底透明blog
toAlpha:動畫結束時的透明度,1.0表示徹底不透明get
package cn.lixyz.animator; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private ImageView iv; private Button alpha; private AlphaAnimation alphaAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { iv = (ImageView) findViewById(R.id.image); alpha = (Button) findViewById(R.id.alpha); alpha.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.alpha: alphaAnimation = new AlphaAnimation(0.1f, 1); alphaAnimation.setDuration(1000); alphaAnimation.setRepeatCount(3); alphaAnimation.setRepeatMode(Animation.REVERSE); iv.startAnimation(alphaAnimation); alphaAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { Log.d("TTTT", "動畫開始"); } @Override public void onAnimationRepeat(Animation animation) { Log.d("TTTT", "動畫重複"); } @Override public void onAnimationEnd(Animation animation) { Log.d("TTTT", "動畫結束"); } }); break; } } }
經常使用屬性:animation
setRepeatCount(int repeatCount)——設置重複次數
setFillAfter(boolean)——動畫執行完後是否停留在執行完的狀態
setStartOffset(long startOffset)——執行前的等待時間
ScakeAnimation的參數:
fromX:動畫起始時X座標上的伸縮尺寸
toX:動畫結束時X座標上的伸縮尺寸
fromY:動畫起始時Y座標上的伸縮尺寸
toY:動畫結束時Y座標上的伸縮尺寸
pivotXType:動畫在X軸相對於物件位置類型
pivotXValue:動畫相對於物件的X座標的開始位置
pivotYType:動畫在Y軸相對於物件位置類型
pivotYValue:動畫相對於物件的Y座標的開始位置
package cn.lixyz.animator; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private ImageView iv; private Button scale; private ScaleAnimation scaleAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { iv = (ImageView) findViewById(R.id.image); scale = (Button) findViewById(R.id.scale); scale.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.scale: scaleAnimation = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(3000); iv.startAnimation(scaleAnimation); break; } } }
經常使用屬性:
setRepeatCount(int repeatCount)——設置重複次數
setFillAfter(boolean)——動畫執行完後是否停留在執行完的狀態
setStartOffset(long startOffset)——執行前的等待時間
TranslateAnimation的參數
fromXDelta: 動畫開始的點離當前View X座標上的差值
toXDelta: 動畫結束的點離當前View X座標上的差值
fromYDelta: 動畫開始的點離當前View Y座標上的差值
toYDelta動畫開始的點離當前View Y座標上的差值
package cn.lixyz.animator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private ImageView iv; private Button transla; private TranslateAnimation translaAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { iv = (ImageView) findViewById(R.id.image); transla = (Button) findViewById(R.id.transla); transla.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.transla: translaAnimation = new TranslateAnimation(0, 150, 0, 0); translaAnimation.setDuration(1000); iv.startAnimation(translaAnimation); break; } } }
經常使用屬性:
animation.setDuration(long durationMillis)——設置動畫持續時間
animation.setRepeatCount(int i)——設置重複次數
animation.setRepeatMode(Animation.REVERSE)——設置反方向執行
RotateAnimation的參數:
fromDegrees——旋轉的開始角度。
toDegrees——旋轉的結束角度。
pivotXType——X軸的伸縮模式,能夠取值爲ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue——X座標的伸縮值。
pivotYType——Y軸的伸縮模式,能夠取值爲ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue——Y座標的伸縮值。
package cn.lixyz.animator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener { private ImageView iv; private Button rotate; private RotateAnimation rotateAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { iv = (ImageView) findViewById(R.id.image); rotate = (Button) findViewById(R.id.rotate); rotate.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.rotate: rotateAnimation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setDuration(2000); iv.startAnimation(rotateAnimation); break; } } }
經常使用方法:
animation.setRepeatCount(int repeatCount)——設置重複次數 animation.setFillAfter(boolean)——動畫執行完後是否停留在執行完的狀態 animation.setStartOffset(long startOffset)——執行前的等待時間