学习动画

最近又开始学习动画了,隔一段时间就想着学习一下,对于动画绝对是真爱。

效果图:

path.gif
package com.example.sunxiaokun.studypath.activity;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.FrameLayout;

import com.example.sunxiaokun.studypath.R;
import com.example.sunxiaokun.studypath.myview.CircleEvaluator;
import com.example.sunxiaokun.studypath.myview.DrawCircleView;
import com.example.sunxiaokun.studypath.myview.StudyPathView;

public class StudyPaintActivity extends AppCompatActivity {

    private FrameLayout mStudy_ll_parent;
    private DrawCircleView mDrawCircleView;
    private StudyPathView mStudyPathView;
    private ValueAnimator mValueAnimator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_study_paint);

        mStudy_ll_parent = (FrameLayout) findViewById(R.id.study_ll_parent);
        mStudyPathView = new StudyPathView(this);
        mDrawCircleView = new DrawCircleView(this);
        mStudy_ll_parent.addView(mStudyPathView);
        mStudy_ll_parent.addView(mDrawCircleView);

        Point fromPoint = new Point(0 , 0);
        Point endPoint = new Point(200 , 0);
        Point controllPoint = new Point(100, 100);


        //二阶贝塞尔曲线
        mValueAnimator = ValueAnimator.ofObject(new CircleEvaluator(controllPoint),fromPoint,endPoint);
        mValueAnimator.setDuration(3000);
        mValueAnimator.start();
        mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Point point = (Point) animation.getAnimatedValue();
                mDrawCircleView.setX(point.x);
                mDrawCircleView.setY(point.y);
            }
        });
        mValueAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                modifyAnimator(mDrawCircleView, "translationY", 0,100,2);
            }
        });

    }


    /**
     * 平移
     * @param view
     * @param xy
     * @param from
     * @param end
     * @param count
     */
    public void modifyAnimator(View view, String xy, int from , int end, final int count){

        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, xy, from, end);
        objectAnimator.setDuration(2000);
        objectAnimator.start();
        objectAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(count == 3){
                    modifyAnimator(mDrawCircleView, "translationY", 100,0,4);
                }else if(count == 2){
                    modifyAnimator(mDrawCircleView, "translationX", 200,0,3);
                }else if(count == 4){
                    mValueAnimator.start();
                }

            }
        });

    }

}

package com.example.sunxiaokun.studypath.myview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
/**
 * Created by xxx on 2017/6/29.
 */

public class DrawCircleView extends View {

    private Paint mPaint;

    public DrawCircleView(Context context) {
        this(context, null);
    }

    public DrawCircleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(Color.BLUE);
        mPaint.setStrokeWidth(2);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(100,100,3, mPaint);
    }
}

package com.example.sunxiaokun.studypath.myview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by sunxiaokun on 2017/6/29.
 */

public class StudyPathView extends View {

    private Paint mPaint;
    private Path mPath;

    public StudyPathView(Context context) {
        this(context, null);
    }

    public StudyPathView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();

    }

    private void init() {

        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStrokeWidth(1);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.GRAY);

        mPath = new Path();
        mPath.moveTo(100,100);
        mPath.quadTo(200, 200, 300,100);
        mPath.lineTo(300,200);
        mPath.lineTo(100,200);
        mPath.close();

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(mPath, mPaint);
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容