91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-10 09:36:04 來源:腳本之家 閱讀:165 作者:妖久 欄目:移動開發

貝塞爾曲線:

貝塞爾曲線于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(),

記得通知曲線重繪。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武城县| 思茅市| 邹城市| 武冈市| 临澧县| 达州市| 巴东县| 肥东县| 台北市| 六盘水市| 蓝山县| 吴江市| 玉树县| 大冶市| 阳曲县| 黄平县| 通辽市| 文昌市| 彭阳县| 临西县| 远安县| 怀化市| 慈利县| 连平县| 肇庆市| 十堰市| 清流县| 兴山县| 南投市| 柳河县| 龙里县| 沙田区| 蒲城县| 锡林浩特市| 太和县| 五台县| 建德市| 大名县| 临夏县| 兴和县| 凌源市|