android落下动画,Android应用开发android 购物车小球掉落动画
本文將帶你了解Android應用開發android 購物車小球掉落動畫,希望本文對大家學Android有所幫助。
先貼效果圖
對自定義View小紅球的繪制
public class BallView extends TextView implements ? ValueAnimator.AnimatorUpdateListener {
public static final int VIEW_SIZE ? = 20;
protected Context mContext;
protected Paint ? mPaint4Circle;
protected int radius;
protected Point ? startPosition;
protected Point ? endPosition;
public BallView(Context context) ? {
this(context, null);
}
public BallView(Context context, ? AttributeSet attrs) {
this(context, attrs, ? 0);
}
public BallView(Context context, ? AttributeSet attrs, int defStyleAttr) {
super(context, attrs, ? defStyleAttr);
this.mContext = ? context;
//初始化畫筆
mPaint4Circle = new ? Paint();
mPaint4Circle.setColor(Color.RED);
mPaint4Circle.setAntiAlias(true);
setGravity(Gravity.CENTER);
setText(1);
setTextColor(Color.WHITE);
setTextSize(12);
}
public void ? setStartPosition(Point startPosition) {
startPosition.y -= 10;
this.startPosition = ? startPosition;
}
public void setEndPosition(Point ? endPosition) {
this.endPosition = ? endPosition;
}
@Override
protected void onMeasure(int ? widthMeasureSpec, int heightMeasureSpec) {
int pxSize = (int) ? convertDpToPixel(VIEW_SIZE, mContext);
//繪制大小
setMeasuredDimension(pxSize, ? pxSize);
//求出半徑
radius = pxSize / 2;
}
@Override
protected void onDraw(Canvas ? canvas) {
//畫一個園
canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, ? radius, mPaint4Circle);
super.onDraw(canvas);
}
public void ? startBeizerAnimation() {
if (startPosition == null || ? endPosition == null){
return;
}
//繪制一個貝塞爾曲線的控制點 ? 默認每個往上飛100
int pointX = (startPosition.x ? + endPosition.x) / 2;
int pointY = (int) ? (startPosition.y - convertDpToPixel(100, mContext));
Point controllPoint = new ? Point(pointX, pointY);
BezierEvaluator ? bezierEvaluator = new BezierEvaluator(controllPoint);
ValueAnimator anim = ? ValueAnimator.ofObject(bezierEvaluator, startPosition, endPosition);
anim.addUpdateListener(this);
anim.setDuration(400);
anim.addListener(new ? AnimatorListenerAdapter() {
@Override
public void ? onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
ViewGroup viewGroup = ? (ViewGroup) getParent();
//動畫完成后移除view
viewGroup.removeView(BallView.this);
}
});
anim.setInterpolator(new ? AccelerateDecelerateInterpolator());
anim.start();
}
@Override
public void ? onAnimationUpdate(ValueAnimator animation) {
Point point = (Point) ? animation.getAnimatedValue();
setX(point.x);
setY(point.y);
invalidate();
}
public class BezierEvaluator ? implements TypeEvaluator{
private Point ? controllPoint;
public BezierEvaluator(Point ? controllPoint) {
this.controllPoint = ? controllPoint;
}
@Override
public Point evaluate(float ? t, Point startValue, Point endValue) {
//計算小球運動軌跡(貝塞爾曲線二次方公式)
int x = (int) ((1 - t) * ? (1 - t) * startValue.x + 2 * t * (1 - t) * controllPoint.x + t * t * ? endValue.x);
int y = (int) ((1 - t) * ? (1 - t) * startValue.y + 2 * t * (1 - t) * controllPoint.y + t * t * ? endValue.y);
return new Point(x, ? y);
}
}
//dp轉換px
public static float ? convertDpToPixel(float dp, Context context) {
Resources resources = ? context.getResources();
DisplayMetrics metrics = ? resources.getDisplayMetrics();
float px = dp * ? (metrics.densityDpi / 160f);
return px;
}
}
本文由職坐標整理并發布,希望對同學們有所幫助。了解更多詳情請關注職坐標移動開發之Android頻道!
總結
以上是生活随笔為你收集整理的android落下动画,Android应用开发android 购物车小球掉落动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五人格密室在哪进(《第五人格》官方网站
- 下一篇: android sina oauth2.