国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android自定義View實(shí)現(xiàn)彈性小球效果

2019-12-12 05:23:43
字體:
供稿:網(wǎng)友

照例先看效果圖

自定義代碼示例

public class BezierView extends View { Paint paint;//畫筆 Path path;//路徑 int radius = 50;//圓的半徑 int time = 100;//計(jì)數(shù)時(shí)長(zhǎng) int index; int offsetIndex; float viewX, viewY;//圖形中心點(diǎn)坐標(biāo) float width;//屏幕寬度 float partWidth;//屏幕寬度的1/4 int paddingLeft, paddingRight;//圖形內(nèi)邊距 float x1, y1, x2, y2, x3, y3, x4, y4;//圓形左上右下四個(gè)點(diǎn) float x12, y12, x23, y23, x34, y34, x41, y41;//圓形左上右下四個(gè)點(diǎn)之間的漸變點(diǎn) public BezierView(Context context) {  this(context, null); } public BezierView(Context context, AttributeSet attrs) {  this(context, attrs, 0); } public BezierView(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  paint = new Paint();  paint.setColor(ResourcesCompat.getColor(getResources(), R.color.colorPrimary, null));  paint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) {  paddingLeft = getPaddingLeft();  paddingRight = getPaddingRight();  width = getWidth() - paddingLeft - paddingRight;  partWidth = width / 4;  path = new Path();  path.moveTo(x1, y1);  path.cubicTo(x1, y1, x12, y12, x2, y2);  path.cubicTo(x2, y2, x23, y23, x3, y3);  path.cubicTo(x3, y3, x34, y34, x4, y4);  path.cubicTo(x4, y4, x41, y41, x1, y1);  canvas.drawPath(path, paint);  move(); } public void move() {  new Timer().schedule(new TimerTask() {   @Override   public void run() {    if (index < time - 1) {     index++;     viewX = width / time * index + paddingLeft;     viewY = 400;     x1 = viewX - radius;     x2 = viewX;     x3 = viewX + radius;     x4 = viewX;     y1 = viewY;     y2 = viewY - radius;     y3 = viewY;     y4 = viewY + radius;     offsetIndex = index % (time / 4) + 1;     //根據(jù)圖形移動(dòng)到的區(qū)域進(jìn)行曲線變化     float position = (viewX - paddingLeft) / partWidth;     //右邊半圓     if (position >= 0 && position < 1) {      x3 = viewX + radius + radius / (time / 4) * offsetIndex;     } else if (position >= 1 && position < 2) {      x3 = viewX + radius + radius;     } else if (position >= 2 && position < 3) {      x3 = viewX + radius + radius - radius / (time / 4) * offsetIndex;     } else {      x3 = viewX + radius;     }     x23 = x34 = x3;     y12 = y23 = y2;     //左邊半圓     if (position >= 1 && position < 2) {      x1 = viewX - radius - radius / (time / 4) * offsetIndex;     } else if (position >= 2 && position < 3) {      x1 = viewX - radius - radius;     } else if (position >= 3) {      x1 = viewX - radius - radius + radius / (time / 4) * offsetIndex;     } else {      x1 = viewX - radius;     }     x12 = x41 = x1;     y34 = y41 = y4;     postInvalidate();    } else {     cancel();    }   }  }, 0, 5000); }}

總結(jié)

以上就是Android自定義View實(shí)現(xiàn)彈性小球效果的全部?jī)?nèi)容,希望對(duì)大家開發(fā)Android能帶來一定的幫助,如果有疑問大家可以留言交流。謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色达县| 丹阳市| 永平县| 蓬莱市| 平湖市| 唐海县| 朔州市| 石门县| 宁河县| 即墨市| 冀州市| 喀什市| 台江县| 景德镇市| 揭阳市| 弋阳县| 五原县| 鹤山市| 抚顺县| 仁怀市| 临桂县| 新河县| 长乐市| 冕宁县| 东丰县| 曲水县| 英超| 罗源县| 海门市| 老河口市| 大荔县| 綦江县| 资中县| 石阡县| 肥东县| 建阳市| 巴里| 凤冈县| 阜阳市| 万宁市| 伊宁市|