android落下动画,Android应用开发android 购物车小球掉落动画
本文將帶你了解Android應(yīng)用開(kāi)發(fā)android 購(gòu)物車小球掉落動(dòng)畫,希望本文對(duì)大家學(xué)Android有所幫助。
先貼效果圖
對(duì)自定義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) {
//畫一個(gè)園
canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, ? radius, mPaint4Circle);
super.onDraw(canvas);
}
public void ? startBeizerAnimation() {
if (startPosition == null || ? endPosition == null){
return;
}
//繪制一個(gè)貝塞爾曲線的控制點(diǎn) ? 默認(rèn)每個(gè)往上飛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();
//動(dòng)畫完成后移除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) {
//計(jì)算小球運(yùn)動(dòng)軌跡(貝塞爾曲線二次方公式)
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轉(zhuǎn)換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;
}
}
本文由職坐標(biāo)整理并發(fā)布,希望對(duì)同學(xué)們有所幫助。了解更多詳情請(qǐng)關(guān)注職坐標(biāo)移動(dòng)開(kāi)發(fā)之Android頻道!
總結(jié)
以上是生活随笔為你收集整理的android落下动画,Android应用开发android 购物车小球掉落动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第五人格密室在哪进(《第五人格》官方网站
- 下一篇: c语言不被O2优化,【图片】今天写几个性