Android View專(zhuān)題4--貝塞爾曲線

概念:

 What:貝塞爾曲線是用一系列點(diǎn)來(lái)控制曲線狀態(tài)的呼寸⊙奁可以用來(lái)實(shí)時(shí)繪制曲線。
 How:
 Why:

實(shí)例:

貝賽爾曲線最終2.gif
彈性的圓

實(shí)例1:讓一個(gè)圓漸變成為心形:

貝賽爾曲線最終2.gif
1 繪制坐標(biāo)
坐標(biāo)系.png
 //繪制坐標(biāo)系
private void drawCoordinate(Canvas canvas) {
    canvas.save();
    mPaint.setStrokeWidth(8);
    mPaint.setColor(getResources().getColor(R.color.gray));
    //繪制x軸
    canvas.drawLine(0, mCenterY, mCenterX * 2, mCenterY, mPaint);
    canvas.drawLine(mCenterX, 0, mCenterX, mCenterY * 2, mPaint);

    canvas.restore();
}
2 繪制數(shù)據(jù)點(diǎn)和輔助點(diǎn)等舔,并連接他們:
輔助線.png
 //繪制輔助線
public void drawLine(Canvas canvas) {
    //繪制數(shù)據(jù)點(diǎn)
    mPaint.setColor(getResources().getColor(R.color.blue));
    mPaint.setStrokeWidth(8);
    for (int index = 0; index < mData.length; index += 2) {
        canvas.drawCircle(mData[index], mData[index + 1], 3, mPaint);
    }
    //繪制控制點(diǎn)
    mPaint.setColor(getResources().getColor(R.color.green));
    for (int index = 0; index < mCtrl.length; index += 2) {
        canvas.drawCircle(mCtrl[index], mCtrl[index + 1], 3, mPaint);
    }
    //繪制輔助線
    for (int i = 2, j = 2; i < 8; i += 2, j += 4) {
        canvas.drawLine(mData[i], mData[i + 1], mCtrl[j], mCtrl[j + 1], mPaint);
        canvas.drawLine(mData[i], mData[i + 1], mCtrl[j + 2], mCtrl[j + 3], mPaint);
    }
    canvas.drawLine(mData[0], mData[1], mCtrl[0], mCtrl[1], mPaint);
    canvas.drawLine(mData[0], mData[1], mCtrl[14], mCtrl[15], mPaint);
}
3 繪制貝賽爾曲線:
貝賽爾曲線.png
//繪制貝賽爾曲線
public void drawbezier(Canvas canvas) {
    mPaint.setColor(getResources().getColor(R.color.red));
    mPaint.setStrokeWidth(15);
    Path path = new Path();
    path.moveTo(mData[0], mData[1]);

    path.cubicTo(mCtrl[0], mCtrl[1], mCtrl[2], mCtrl[3], mData[2], mData[3]);
    path.cubicTo(mCtrl[4], mCtrl[5], mCtrl[6], mCtrl[7], mData[4], mData[5]);
    path.cubicTo(mCtrl[8], mCtrl[9], mCtrl[10], mCtrl[11], mData[6], mData[7]);
    path.cubicTo(mCtrl[12], mCtrl[13], mCtrl[14], mCtrl[15], mData[0], mData[1]);

    canvas.drawPath(path, mPaint);
}
4 執(zhí)行循環(huán)骚灸,動(dòng)態(tài)變成心形
貝賽爾曲線最終.gif
 //繪制貝賽爾曲線
public void drawbezier(Canvas canvas) {
    mPaint.setColor(getResources().getColor(R.color.red));
    mPaint.setStrokeWidth(15);
    Path path = new Path();
    path.moveTo(mData[0], mData[1]);

    path.cubicTo(mCtrl[0], mCtrl[1], mCtrl[2], mCtrl[3], mData[2], mData[3]);
    path.cubicTo(mCtrl[4], mCtrl[5], mCtrl[6], mCtrl[7], mData[4], mData[5]);
    path.cubicTo(mCtrl[8], mCtrl[9], mCtrl[10], mCtrl[11], mData[6], mData[7]);
    path.cubicTo(mCtrl[12], mCtrl[13], mCtrl[14], mCtrl[15], mData[0], mData[1]);

    canvas.drawPath(path, mPaint);


    mCurrent += mPiece;
    if (mCurrent < mDuration){

        mData[1] -= 120/mCount;
        mCtrl[7] += 80/mCount;
        mCtrl[9] += 80/mCount;

        mCtrl[4] -= 20/mCount;
        mCtrl[10] += 20/mCount;

        postInvalidateDelayed((long) mPiece);
    }

}
5 注釋掉1,2步驟慌植,即可甚牲。
貝賽爾曲線最終2.gif

實(shí)例2:彈性的圓:

彈性的圓

Demo源碼:

GitHub:ExplainView

參考:

貝塞爾曲線開(kāi)發(fā)的藝術(shù)
安卓自定義View進(jìn)階-Path之貝塞爾曲線
網(wǎng)頁(yè)版本繪制
學(xué)習(xí),思維三部曲:WHAT蝶柿、HOW丈钙、WHY(通過(guò)現(xiàn)象看本質(zhì))
Android 貝塞爾曲線,QQ 刪除小紅點(diǎn)類(lèi)似效果實(shí)現(xiàn)
Iwfu-貝塞爾曲線配合動(dòng)畫(huà)效果的小例子
三次貝塞爾曲線練習(xí)之彈性的圓
PullBezierZoomView 一個(gè)具有貝塞爾曲線下拉效果的自定義view
從Android動(dòng)畫(huà)到貝塞爾曲線
貝塞爾曲線實(shí)戰(zhàn)--BackgroundView
貝塞爾曲線之購(gòu)物車(chē)動(dòng)畫(huà)效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末交汤,一起剝皮案震驚了整個(gè)濱河市雏赦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芙扎,老刑警劉巖星岗,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異戒洼,居然都是意外死亡俏橘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)圈浇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寥掐,“玉大人,你說(shuō)我怎么就攤上這事磷蜀≌僭牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵褐隆,是天一觀的道長(zhǎng)污它。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么轨蛤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任蜜宪,我火速辦了婚禮,結(jié)果婚禮上祥山,老公的妹妹穿的比我還像新娘。我一直安慰自己掉伏,他們只是感情好缝呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斧散,像睡著了一般供常。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸡捐,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天栈暇,我揣著相機(jī)與錄音,去河邊找鬼箍镜。 笑死源祈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的色迂。 我是一名探鬼主播香缺,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歇僧!你這毒婦竟也來(lái)了图张?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诈悍,失蹤者是張志新(化名)和其女友劉穎祸轮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體侥钳,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡适袜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慕趴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痪蝇。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冕房,靈堂內(nèi)的尸體忽然破棺而出躏啰,到底是詐尸還是另有隱情,我是刑警寧澤耙册,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布给僵,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帝际。R本人自食惡果不足惜蔓同,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹲诀。 院中可真熱鬧斑粱,春花似錦、人聲如沸脯爪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痕慢。三九已至尚揣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掖举,已是汗流浹背快骗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塔次,地道東北人方篮。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像俺叭,于是被迫代替她去往敵國(guó)和親恭取。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,759評(píng)論 22 665
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)熄守、插件蜈垮、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 葛吉夫律動(dòng)中蒙著眼睛聽(tīng)著音樂(lè)節(jié)拍跳舞,我還是有點(diǎn)心慌裕照,沒(méi)有了老師帶領(lǐng)攒发,我完全忘了每個(gè)動(dòng)作是否準(zhǔn)確。我想打開(kāi)眼...
    火種格格閱讀 340評(píng)論 8 10
  • 為活躍學(xué)習(xí)氣氛晋南,鍛造堅(jiān)強(qiáng)黨性惠猿,快樂(lè)學(xué)習(xí),爭(zhēng)先創(chuàng)優(yōu)负间,經(jīng)班委研究偶妖,制定第二學(xué)期工作計(jì)劃如下: 一.黨性鍛煉活動(dòng) 1.5...
    江月筆記閱讀 122評(píng)論 0 0