1. 程式人生 > >Android中實現雙擊點贊動畫效果

Android中實現雙擊點贊動畫效果

iv_easy_like.getBackground().setAlpha(0);
rlLike.setOnTouchListener(new OnDoubleClickListener(new OnDoubleClickListener.DoubleClickCallback() {
    @Override
    public void onDoubleClick() {
        //處理雙擊事件
      move();
    }
}));
private void move() {
    iv_easy_like.setVisibility(View.VISIBLE);
    iv_easy_like.getBackground().setAlpha(255);
    valueAnimator = ValueAnimator.ofObject(new BezierEvaluator(),
            new PointF(iv_easy_like.getLeft(), iv_easy_like.getBottom() - iv_easy_like.getHeight()),
            new PointF(width, 0));
    valueAnimator.setDuration(2000);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            PointF pointF = (PointF) animation.getAnimatedValue();
            iv_easy_like.setX(pointF.x);
            iv_easy_like.setY(pointF.y);
            if ((Math.round(pointF.y)) < 150) {
                iv_easy_like.getBackground().setAlpha(Math.round(pointF.y));
            }

        }
    });
    valueAnimator.setTarget(iv_easy_like);
    valueAnimator.setRepeatCount(0);
    valueAnimator.start();
}
class BezierEvaluator implements TypeEvaluator<PointF> {

    @Override
    public PointF evaluate(float fraction, PointF startValue,
                           PointF endValue) {
        float oneMinusT = 1.0f - fraction;
        PointF point = new PointF();
        PointF point0 = (PointF) startValue;
        PointF point1 = new PointF();
        point1.set(width, 0);

        PointF point2 = new PointF();
        point2.set(0, height);

        PointF point3 = (PointF) endValue;

        point.x = oneMinusT * oneMinusT * oneMinusT * (point0.x) + 4
                * oneMinusT * oneMinusT * fraction * (point0.x) + 2
                * oneMinusT * fraction * fraction * (point0.x) + fraction
                * fraction * fraction * (point0.x);

        point.y = oneMinusT * oneMinusT * oneMinusT * (point0.y)
                + oneMinusT * oneMinusT * fraction * (point0.y) + 2
                * oneMinusT * fraction * fraction * (point2.y) + fraction
                * fraction * fraction * (point3.y);

        return point;
    }
}

資源下載: