Android中實現雙擊點贊動畫效果
阿新 • • 發佈:2019-01-10
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; } }
資源下載: