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

首頁 > 系統 > Android > 正文

Android貝塞爾曲線實現填充不規則圖形并隨手指運動

2019-10-21 21:38:32
字體:
來源:轉載
供稿:網友

貝塞爾曲線:

貝塞爾曲線于1962,由法國工程師皮埃爾·貝塞爾所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由 Paul de Casteljau 于 1959 年運用 de Casteljau 演算法開發,以穩定數值的方法求出貝茲曲線。貝塞爾曲線主要用于二維圖形應用程序中的數學曲線,曲線由起始點,終止點(也稱錨點)和控制點組成,通過調整控制點,貝塞爾曲線的形狀會發生變化。

在此舉一個例子,實現貝塞爾曲線,基于以下場景:

Android,貝塞爾曲線

上面的圖片,我們可以見到一個白色的區域,邊緣為弧形,這條弧線便是我們用貝塞爾曲線畫出來的,然后我們要實現隨著手指的上滑,弧線慢慢變直線,往下滑再慢慢變弧線。

1、首先我們自定義一個View,然后畫出貝塞爾曲線,想畫出貝塞爾曲線,要設置它的起點,終點,和控制點。

以下紅色區域分別為我們設置的起點,控制點,終點。

Android,貝塞爾曲線

初始化畫筆以及各點如下:

private Paint mPaint;private int centerX, centerY;private PointF start, end, control;mPaint = new Paint();mPaint.setColor(Color.WHITE);mPaint.setStyle(Paint.Style.FILL);mPaint.setAntiAlias(true);//起點start = new PointF(0, 0);//終點end = new PointF(0, 0);//控制點control = new PointF(0, 0);

2、給控制點賦值:

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {  super.onSizeChanged(w, h, oldw, oldh);  centerX = w / 2;  centerY = h / 2;  // 初始化數據點和各點的位置  start.x = 0;  start.y = 0;  end.x = w;  end.y = 0;  control.x = centerX;  control.y = centerY; }

控制點為中點。

3、把貝塞爾曲線下方的圖形填充為白色:

 @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  Path path = new Path();  path.moveTo(start.x, start.y);  path.quadTo(control.x, control.y, end.x, end.y);  //上面這兩句就畫出了貝塞爾曲線了  path.lineTo(end.x, 40);  path.lineTo(0, 40);  path.close();  //填充圖形  canvas.drawPath(path, mPaint); }

上面便把貝塞爾曲線下方的填充為白色了,高度40。

那么,我們怎么去讓該曲線變動呢,慢慢變直線,慢慢變弧線,下方一直是填充滿白色。其實很簡單,只要我們手指在移動的時候去獲取移動的距離,然后控制貝塞爾曲線的控制點變化就可以了。

即:

control.y = centerY + 手指移動的距離;

invalidate(),

記得通知曲線重繪。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 虎林市| 麦盖提县| 子长县| 沾化县| 永嘉县| 广西| 东阿县| 疏勒县| 周至县| 黑河市| 东山县| 西昌市| 衡阳县| 沂源县| 文成县| 汽车| 临武县| 绍兴市| 穆棱市| 休宁县| 东乡族自治县| 南岸区| 章丘市| 陵水| 鄂托克前旗| 黄骅市| 浏阳市| 梁河县| 绥德县| 杭锦旗| 上栗县| 环江| 蓝山县| 黄大仙区| 宁明县| 尼玛县| 万全县| 五家渠市| 密云县| 黎川县| 田阳县|