Macitvity类
package com.bwie.lenovo.propertyanimator; import android.animation.ObjectAnimator; import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.graphics.PointF; import android.os.Build; import android.os.Bundle; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mJianbian; private Button mTranslation; private Button mRotate; private Button mSuofang; private CricleView mCriclerview; private Button mZuhe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mJianbian = (Button) findViewById(R.id.jianbian); mJianbian.setOnClickListener(this); mTranslation = (Button) findViewById(R.id.translation); mTranslation.setOnClickListener(this); mRotate = (Button) findViewById(R.id.rotate); mRotate.setOnClickListener(this); mSuofang = (Button) findViewById(R.id.suofang); mSuofang.setOnClickListener(this); mCriclerview = (CricleView) findViewById(R.id.criclerview); mZuhe = (Button) findViewById(R.id.zuhe); mZuhe.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.jianbian: Toast.makeText(MainActivity.this, mCriclerview.toString(), Toast.LENGTH_SHORT).show(); ObjectAnimator animator = ObjectAnimator.ofFloat(mCriclerview, "alpha", 1f, 0f, 1f); animator.setDuration(10000); animator.start(); break; case R.id.translation: float curTranslationX = mCriclerview.getTranslationX(); ObjectAnimator animator1 = ObjectAnimator.ofFloat(mCriclerview, "translationX", curTranslationX, 500f, curTranslationX); animator1.setDuration(5000); animator1.start(); break; case R.id.rotate: ObjectAnimator animator2 = ObjectAnimator.ofFloat(mCriclerview, "rotation", 0f, 360f); animator2.setDuration(5000); animator2.start(); break; case R.id.suofang: ObjectAnimator animator3 = ObjectAnimator.ofFloat(mCriclerview, "scaleY", 1f, 3f, 1f); animator3.setDuration(5000); animator3.start(); break; case R.id.zuhe: parabola(); break; default: break; } } /** * 抛物线动画 */ @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) public void parabola() { ValueAnimator valueAnimator = new ValueAnimator(); valueAnimator.setDuration(2000); valueAnimator.setObjectValues(new PointF(0, 0)); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.setEvaluator(new TypeEvaluator<PointF>() { @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { /**x方向200px/s ,则y方向0.5 * 200 * t**/ PointF point = new PointF(); point.x = 200 * fraction * 3; point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3); return point; } }); valueAnimator.start(); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { PointF point = (PointF) animation.getAnimatedValue(); mCriclerview.setX(point.x); mCriclerview.setY(point.y); } }); } }CricleView
package com.bwie.lenovo.propertyanimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; /** * Created by lenovo on 2017/12/15. */ public class CricleView extends View{ private int mColor = Color.RED; private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); public CricleView(Context context) { super(context); init(); } public CricleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CricleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * 初始化画笔的颜色 */ private void init(){ mPaint.setColor(mColor); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); int radius = Math.min(width,height) / 2; canvas.drawCircle(width / 2,height / 2,radius,mPaint); } }activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.lenovo.propertyanimator.MainActivity"> <com.bwie.lenovo.propertyanimator.CricleView android:id="@+id/criclerview" android:padding="5dp" android:layout_margin="5dp" android:layout_width="112dp" android:layout_height="100dp" /> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/jianbian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="渐变"/> <Button android:id="@+id/translation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="平移"/> <Button android:id="@+id/rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="旋转"/> <Button android:id="@+id/suofang" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="缩放"/> <Button android:id="@+id/zuhe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="组合动画"/> </LinearLayout> </LinearLayout>