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;
}
}
资源下载: