上一篇介紹了[自定義view需要知道的基本函數](http://blog.csdn.net/wingichoy/article/details/50487009)。新開一篇獻給借給我vpn的深圳_奮斗小哥。
轉載請注明出處:http://blog.csdn.net/wingichoy/article/details/50492828
今天給大家介紹一個非常神奇的曲線,貝塞爾曲線。相信大家之前都有耳聞。
很久之前就久聞該線大名,但是一直不是很了解,在經過一番谷歌之后,有了初步的概念:三點確定一條曲線:起點,終點,輔助點。
三個點的基本關系如下:

當初看這圖我也看了老半天,只知道是非常平滑,不知道三個點的具體關系,于是變寫了一段程序來測試輔助點與始終點的關系。
Android 的Path類提供了繪制二階貝塞爾曲線的方法,使用方法如下:
~~~
//設置起點
path.moveTo(200,200);
//設置輔助點坐標 300,200 終點坐標400,200
path.quadTo(300, 200, 400, 200);
~~~
這里我將貝塞爾曲線的輔助點y軸和起始點設置相同,draw以后效果如下:

看到是一條直線,這是因為他y軸沒有拉伸,只是x軸進行了拉伸。把輔助點y+100嘗試

看到已經拉伸。。其實這樣還是不能很好的體現 貝塞爾曲線的規律。 所以要持續改變,研究他的規律,這里重寫onTouchEvent,讓觸摸點的位置作為輔助點。觀察變化。
~~~
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setStyle(Paint.Style.STROKE);
p.setStrokeWidth(10);
Path path = new Path();
path.moveTo(200, 200);
path.quadTo(mSupX, mSupY, 400, 200);
canvas.drawPath(path,p);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_MOVE:
mSupX = event.getX();
mSupY = event.getY();
invalidate();
}
return true;
}
~~~

可以看到 是根據鼠標位置變化的曲線,可是現在還是不能很好的表現曲線的突出點和輔助點關系,接下來把輔助點也畫出來,方便觀察。
~~~
canvas.drawPoint(mSupX,mSupY,p);
~~~

這下,輔助點和曲線的關系就很明顯了。
許多炫酷的效果都離不開貝塞爾曲線,貝塞爾曲線的應用:[仿360內存清理效果](http://blog.csdn.net/wingichoy/article/details/50500479)。
- 前言
- android自定義viewgroup初步之一----抽屜菜單
- Android 自定義view --圓形百分比(進度條)
- Android 自定義View -- 簡約的折線圖
- 新手自定義view練習實例之(一) 泡泡彈窗
- 新手自定義view練習實例之(二) 波浪view
- 手把手帶你畫一個 時尚儀表盤 Android 自定義View
- 手把手帶你畫一個動態錯誤提示 Android自定義view
- 手把手帶你做一個超炫酷loading成功動畫view Android自定義view
- 關于Android自定義view 你所需要知道的基本函數
- Android自定義view進階-- 神奇的貝塞爾曲線
- wing帶你玩轉自定義view系列(1) 仿360內存清理效果
- wing帶你玩轉自定義view系列(2) 簡單模仿qq未讀消息去除效果
- wing帶你玩轉自定義view系列(3)模仿微信下拉眼睛
- 手把手教你畫一個 逼格滿滿圓形水波紋loadingview Android
- 有坑?? 為何wing墜入PorterDuffXferMode的萬丈深淵(PorterDuffXferMode深入試驗)
- 手把手帶你畫一個漂亮蜂窩view Android自定義view
- 一個炫字都不夠??!!!手把手帶你打造3D自定義view
- 恭喜發財! -- 手把手教你仿造一個qq下拉搶紅包 Android自定義view