日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android落下动画,Android应用开发android 购物车小球掉落动画

發布時間:2023/12/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 购物车小球掉落动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。