@linux1s1s
2017-01-22T16:33:17.000000Z
字数 3334
阅读 3008
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;
@Override
protected 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()
{
@Override
public void onAnimationStart(Animator animation)
{
super.onAnimationStart(animation);
mTestView.setVisibility(View.VISIBLE);
}
@Override
public 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()
{
@Override
public 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()
{
@Override
public void onAnimationStart(Animator animation)
{
super.onAnimationStart(animation);
mTestView.setVisibility(View.VISIBLE);
}
});
set.start();
}
}