@linux1s1s
2017-01-22T08:33:17.000000Z
字数 3334
阅读 3310
AndroidAnimation 2015-06
这里提供一个 ObjectAnimator 以供参考:这个Demo基本实现了从左向右(从左边出来,然后停留在中间放大,然后从右边缩小消失的效果)
代码比较简单,就一个类FiveActivity.java即可
package studio.neulion.com.tasktest;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.annotation.TargetApi;import android.app.Activity;import android.os.Build.VERSION_CODES;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.View;import android.view.animation.BounceInterpolator;public class FiveActivity extends Activity{private View mTestView;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();translateX(); //仅仅一个动画translateXScaleBoth(); //实现叠加动画translateXScaleOrder(); //实现顺序动画}private void initView(){mTestView = findViewById(R.id.test_view);}@TargetApi(VERSION_CODES.HONEYCOMB)private void translateX(){DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTestView, "translationX", -(dm.widthPixels / 2 + mTestView.getWidth() / 2), 0F);objectAnimator.setDuration(1000);objectAnimator.setInterpolator(new BounceInterpolator());objectAnimator.addListener(new AnimatorListenerAdapter(){@Overridepublic void onAnimationStart(Animator animation){super.onAnimationStart(animation);mTestView.setVisibility(View.VISIBLE);}@Overridepublic void onAnimationEnd(Animator animation){super.onAnimationEnd(animation);}});objectAnimator.start();}@TargetApi(VERSION_CODES.HONEYCOMB)private void translateXScaleBoth(){PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f, 0f, 1f);PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f, 0f, 1f);PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f, 0f, 1f);ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(mTestView, pvhX, pvhY, pvhZ);objectAnimator.setDuration(1000);objectAnimator.addListener(new AnimatorListenerAdapter(){@Overridepublic void onAnimationStart(Animator animation){super.onAnimationStart(animation);mTestView.setVisibility(View.VISIBLE);}});objectAnimator.start();}@TargetApi(VERSION_CODES.HONEYCOMB)private void translateXScaleOrder(){DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);ObjectAnimator translationXin = ObjectAnimator.ofFloat(mTestView, "translationX", -(dm.widthPixels / 2 + mTestView.getWidth() / 2), 0F);ObjectAnimator scaleXin = ObjectAnimator.ofFloat(mTestView, "scaleX", 1f, 0f, 6f);ObjectAnimator scaleYin = ObjectAnimator.ofFloat(mTestView, "scaleY", 1f, 0f, 6f);ObjectAnimator translationXout = ObjectAnimator.ofFloat(mTestView, "translationX", 0F, (dm.widthPixels / 2 + mTestView.getWidth() / 2));ObjectAnimator scaleXout = ObjectAnimator.ofFloat(mTestView, "scaleX", 6f, 0f);ObjectAnimator scaleYout = ObjectAnimator.ofFloat(mTestView, "scaleY", 6f, 0f);AnimatorSet set = new AnimatorSet();set.play(translationXin).before(scaleXin);set.play(scaleXin).with(scaleYin);set.play(translationXout).with(scaleXout).with(scaleYout).after(scaleXin);set.setDuration(1000);set.addListener(new AnimatorListenerAdapter(){@Overridepublic void onAnimationStart(Animator animation){super.onAnimationStart(animation);mTestView.setVisibility(View.VISIBLE);}});set.start();}}
