Android动画中Interpolator 加速器的使用

遇到一个项目需求,想让动画变得更活泼一点,于是想到了动画属性中的Interpolator,写了基本例子测试一下android提供给我们现成的加速器的效果:

效果 代码中方法 xml中属性
越来越快 AccelerateInterpolator() @android:anim/accelerate_interpolator
越来越慢 DecelerateInterpolator() @android:anim/decelerate_interpolator
先快后慢 AccelerateDecelerateInterpolator() @android:anim/accelerate_decelerate_interpolator
先后退一小步然后向前加速 AnticipateInterpolator() @android:anim/anticipate_interpolator
快速到达终点超出一小步然后回到终点 OvershootInterpolator() @android:anim/overshoot_interpolator
到达终点超出一小步然后回到终点 AnticipateOvershootInterpolator() @android:anim/anticipate_overshoot_interpolator
弹球效果,弹几下回到终点 BounceInterpolator() @android:anim/bounce_interpolator
均匀速度 LinearInterpolator() @android:anim/linear_interpolator


设置布局的时候,直接找了一个背景 还有一个需要移动的图片



    


在页面中,直接让ImageView执行平移动画也没问题,图片成功的加速的向左运行

public class MainActivity extends Activity {
	ImageView img;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		 img=(ImageView)findViewById(R.id.imageView1);
		  TranslateAnimation translate=new TranslateAnimation(0, -750, 0, 0);
			translate.setDuration(4000);
			translate.setFillAfter(true);
			translate.setInterpolator(new AccelerateInterpolator() );
			img.setAnimation(translate);
		
	}
}

写到这儿,突然想把所有的加速动画效果都看一遍,于是就在ActionBar上把menu都添加上了,运行的时候,ActionBar上那三个小点不见了,只能通过点击物理键盘的菜单键,才能弹出menu,所以在代码中,有加上getOverflowMenu()方法

//显示ActionBar上隐藏目录的三个点
	private void getOverflowMenu() {
        try {
           ViewConfiguration config = ViewConfiguration.get(this);
           Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
           if(menuKeyField != null) {
               menuKeyField.setAccessible(true);
               menuKeyField.setBoolean(config, false);
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }

Android动画中Interpolator 加速器的使用_第1张图片

然后在onMenuItemSelected方法中,开始设置每一个加速度的效果,但是发现一个问题,明明已经运行进入case R.id.morefast分支了,但是动画就是不显示

@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.morefast:  //越来越快
			  TranslateAnimation translate=new TranslateAnimation(0, -750, 0, 0);
				translate.setDuration(4000);
				translate.setFillAfter(false);
				translate.setInterpolator(new AccelerateInterpolator() );
				img.setAnimation(translate);
			break;
		case R.id.moreslow: //越来越慢
			 TranslateAnimation translate_1=new TranslateAnimation(0, -750, 0, 0);
			 translate_1.setDuration(4000);
			 translate_1.setFillAfter(true);
			 translate_1.setInterpolator(new DecelerateInterpolator() );
			
			img.setAnimation(translate_1);
			break;

后来在每一个case分支,都先对ImageView 清除一下动画显示,再增加新的动画就可以实现效果了

	case R.id.morefast:  //越来越快
			  img.clearAnimation();
			  TranslateAnimation translate=new TranslateAnimation(0, -750, 0, 0);
				translate.setDuration(4000);
				translate.setFillAfter(false);
				translate.setInterpolator(new AccelerateInterpolator() );
				img.setAnimation(translate);
			break;

测试程序的下载地址: 点击打开链接






你可能感兴趣的:(Android)