package com.com.mr_wrong.Property_Animation; import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PointF; import android.os.Bundle; import android.view.View; import android.view.animation.BounceInterpolator; import android.view.animation.LinearInterpolator; import android.widget.Button; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; import com.Utils.LogUtils; import com.example.mr_wrong.androidstudioproject.R; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; /** * Created by Mr_Wrong on 15/7/3. */ public class AnimActivity extends BaseActivity { @InjectView(R.id.iv_anim) ImageView mTestImage; @InjectView(R.id.bt_ObjectAnimator) Button btObjectAnimator; @InjectView(R.id.bt_1) Button bt1; @InjectView(R.id.bt_2) Button bt2; @InjectView(R.id.bt_3) Button bt3; @InjectView(R.id.bt_4) Button bt4; @InjectView(R.id.bt_5) Button bt5; @InjectView(R.id.bt_6) Button bt6; @InjectView(R.id.bt_7) Button bt7; @InjectView(R.id.seekBar) SeekBar seekBar; @InjectView(R.id.sb_red) SeekBar sb_Red; @InjectView(R.id.sb_green) SeekBar sb_Green; @InjectView(R.id.sb_blue) SeekBar sb_Blue; @InjectView(R.id.sb_alpha) SeekBar sb_Alpha; @InjectView(R.id.tv_color) TextView tv_Color; @OnClick(R.id.bt_ObjectAnimator) public void sayHi(Button button) { // ObjectAnimator.ofFloat(mTestImage,"rotationY",0.0f,360f) // .setDuration(500) // .start(); // 使用objanimator实现多个属性 // ObjectAnimator animator = ObjectAnimator.ofFloat(mTestImage, "abc", 1f, 0f) // .setDuration(500); // animator.start(); // animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // @Override // public void onAnimationUpdate(ValueAnimator valueAnimator) { // float cVal = (Float) valueAnimator.getAnimatedValue(); // mTestImage.setAlpha(cVal); // mTestImage.setScaleX(cVal); // mTestImage.setScaleY(cVal); // } // }); // 使用PropertyvaluesHolder实现多个属性变化 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("alpha", 1.0f, 0f, 1.0f); PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0f, 1.0f); PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0f, 1.0f); ObjectAnimator.ofPropertyValuesHolder(mTestImage, p1, p2, p3).setDuration(500).start(); } @OnClick(R.id.bt_1) public void chuizhi() { //使用ValueAnimator 没有在属性上进行操作 (垂直移动) ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 500); valueAnimator.setTarget(mTestImage); valueAnimator.setDuration(1000); valueAnimator.setInterpolator(new BounceInterpolator()); valueAnimator.start(); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { mTestImage.setTranslationX((float) valueAnimator.getAnimatedValue()); // valueAnimator.seta } }); //不想实现全部方法 可以使用animatorlistneradapter valueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } }); valueAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { // ViewGroup parent = (ViewGroup) mTestImage.getParent(); // if (parent != null) { // parent.removeView(mTestImage); // } // tool.ShowToast("删除图片"); } @Override public void onAnimationCancel(Animator animator) { //动画立即停止 停在当前位置 } @Override public void onAnimationRepeat(Animator animator) { } }); } @OnClick(R.id.bt_2) public void paowuxian() { // 使用自定义的TypeValue实现抛物线 ValueAnimator valueAnimator = new ValueAnimator(); valueAnimator.setDuration(1000); valueAnimator.setObjectValues(new PointF(0, 0)); LinearInterpolator interpolator = new LinearInterpolator(); interpolator.getInterpolation(0.3f); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.setEvaluator(new TypeEvaluator<PointF>() { @Override public PointF evaluate(float v, PointF pointF, PointF t1) { PointF p = new PointF(); // LogUtils.e(v); p.x = 200 * v * 3; p.y = 100 * v * 3 * v * 3; return p; } }); valueAnimator.start(); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { PointF p = (PointF) valueAnimator.getAnimatedValue(); mTestImage.setX(p.x); mTestImage.setY(p.y); } }); } /** * 使用animator执行多动画 */ @OnClick(R.id.bt_3) public void play() { ObjectAnimator animator = ObjectAnimator.ofFloat(mTestImage, "scaleX", 1.0f, 0f); ObjectAnimator animator1 = ObjectAnimator.ofFloat(mTestImage, "scaleY", 1.0f, 0f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(1000); //animatorSet.playSequentially();顺序执行 animatorSet.playTogether(animator, animator1); animatorSet.start(); } /** * 多动画依次执行 */ @OnClick(R.id.bt_4) public void play1() { float x = mTestImage.getX() + 400; ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(mTestImage, "scaleX", 1.0f, 3.0f); ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(mTestImage, "scaleY", 1.0f, 3.0f); ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(mTestImage, "x", x, 0.f); ObjectAnimator objectAnimator4 = ObjectAnimator.ofFloat(mTestImage, "x", x); AnimatorSet set = new AnimatorSet(); set.setDuration(1000); set.play(objectAnimator1).with(objectAnimator2); set.play(objectAnimator2).with(objectAnimator3); set.play(objectAnimator4).after(objectAnimator3); set.start(); } @OnClick(R.id.bt_5) public void readfromxmlanim() { //Animator animator = AnimatorInflater.loadAnimator(this, R.animator.scalex); Animator animator = AnimatorInflater.loadAnimator(this, R.animator.testanim); mTestImage.setPivotX(0); mTestImage.setPivotY(0); mTestImage.invalidate(); animator.setTarget(mTestImage); animator.start(); } @OnClick(R.id.bt_6) public void LayoutTransition() { Intent intent = new Intent(this, myLayoutTransition.class); startActivity(intent); } @OnClick(R.id.bt_7) public void Transition() { // Intent intent = new Intent(this, PActivity.class); // this.startActivity(intent); // overridePendingTransition(0, 0); mTestImage.setImageBitmap(createViewBitmap(btObjectAnimator)); } public Bitmap createViewBitmap(View v) { Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); v.draw(canvas); return bitmap; } @Override public void setContentView() { setContentView(R.layout.anim_layout); } //转换为十六进制 private String toHexString(int color) { return Integer.toHexString(color); } class SeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch (seekBar.getId()) { case R.id.seekBar: ArgbEvaluator argbEvaluator = new ArgbEvaluator(); int colorstart = Color.parseColor("#15d68f"); int colorend = Color.parseColor("#f2186b"); float c = (float) progress / (float) 100; int color = (Integer) argbEvaluator.evaluate(c, colorstart, colorend); LogUtils.i("#" + toHexString(Color.red(color)) + toHexString(Color.green(color)) + toHexString(Color.blue(color))); bt2.setBackgroundColor(color); break; case R.id.sb_blue: color_blue = seekBar.getProgress(); break; case R.id.sb_green: color_green = seekBar.getProgress(); break; case R.id.sb_red: color_red = seekBar.getProgress(); break; case R.id.sb_alpha: color_alpha = seekBar.getProgress(); break; } tv_Color.setText("#" + toHexString(color_red) + toHexString(color_green) + toHexString(color_blue)); int color1 = Color.argb(color_alpha, color_red, color_green, color_blue); bt1.setBackgroundColor(color1); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } } private int color_red = 128, color_blue = 128, color_green = 128, color_alpha = 255; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // TODO: add setContentView(...) invocation ButterKnife.inject(this); SeekBarChangeListener listener = new SeekBarChangeListener(); seekBar.setOnSeekBarChangeListener(listener); sb_Blue.setOnSeekBarChangeListener(listener); sb_Green.setOnSeekBarChangeListener(listener); sb_Red.setOnSeekBarChangeListener(listener); sb_Alpha.setOnSeekBarChangeListener(listener); tv_Color.setText("#" + toHexString(color_red) + toHexString(color_green) + toHexString(color_blue)); bt1.setBackgroundColor(Color.argb(255, 128, 128, 128)); } }