史上最全的貝塞爾曲線(Bezier)全解(二):Android中曲線的簡單繪制

上一篇中我簡單的介(粘)紹(貼)了一下貝塞爾曲線(Bezier)曲線的原理和公式,但是作為數(shù)學界排的上名號的渣渣,我只能默默的溜過;
?? 不過還好,android幫我們實現(xiàn)好了這個貝塞爾曲線的使用;

Path

這個類中封裝了要使用貝塞爾曲線(Bezier)的簡單方法;使用起來也很簡單,總的來說也只有三步

  • 初始化Path
 mPath = new Path();
  • path移動到起點
  mPath.moveTo(startX, startY / 3);
  • 確定直線的終點
 mPath.lineTo(endX, endY / 3);
  • 調用canvas繪制貝塞爾曲線
 canvas.drawPath(mPath, mPaint);

好了,到這里一階的一條直線就完成了;
??但是這個完全沒任何卵用啊,就一條直線有木有!!

但是,我們可以一直畫下去,就像這樣:

      path.moveTo(touchX + getWidth() / 20, touchY - getHeight() / 10);
        path.lineTo(touchX + getWidth() / 20, touchY);
        path.lineTo(touchX - getWidth() / 20, touchY);
        path.lineTo(touchX - getWidth() / 20, touchY - getHeight() / 10);
        path.lineTo(touchX, touchY - getHeight() / 7);
        path.lineTo(touchX + getWidth() / 20, touchY - getHeight() / 10 + 2);

這段代碼繪制完成之后就是一個隨著手指一動的小火箭了


這里寫圖片描述

??丑爆了有木有,不過還好,如果是大神的話應該可以繪制成一個比較好一些的了吧,主要還是原理,相對于自己直接畫直線,已經(jīng)大大簡化了;

二階曲線##

二階曲線在安卓中的定義也是很簡單的,就是調用quadTo方法,

        mPath.moveTo(startX, startY);
        mPath.quadTo(touchX, touchY, endX, endY);
        canvas.drawPath(mPath, mPaint);
這里寫圖片描述

不管是幾階的,都是要先moveTo到起點;

三階曲線

這里寫圖片描述
         mPath.moveTo(pointFStart.x, pointFStart.y);
        mPath.cubicTo(pointFFirst.x, pointFFirst.y, pointFSecond.x, pointFSecond.y, pointFEnd.x, pointFEnd.y);
        canvas.drawPath(mPath, mPaint);

途中從下倒上,四個點依次是pointFStart,pointFFirst,pointFSecond,pointFSecond;根本沒什么難度,非常簡單,可以直接使用,上篇提到的"心"的移動就是按照這個軌跡進行移動,所以看起來十分順滑,效果也不錯;

貝塞爾曲線的繪制本身并沒有什么難度,這些都是很基礎的一些東西,但是卻能實現(xiàn)一些很炫酷的效果,比如qq上的粘性控件的效果等,這些都可以實現(xiàn);

好了,簡單的使用就介紹到這里了

,[史上最全的貝塞爾曲線(Bezier)全解(三):貝塞爾曲線實現(xiàn)滿屏愛心]我會利用貝塞爾曲線實現(xiàn)一些炫酷的效果

最后附上源碼:https://github.com/sangxiaonian/BezierIntroduce.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容