扔物線大神的《Android 開發(fā)進階: 自定義 View 1-1 繪制基礎》Practice的補充代碼

GitHub地址:PracticeDraw1

練習內(nèi)容1:使用canvas.drawColor()方法把View涂成黃色

canvas.drawColor(Color.YELLOW);

canvas.drawColor()的使用方法匯總:

canvas.drawColor(Color.YELLOW);
canvas.drawColor(Color.parseColor("#00FF00"));
canvas.drawColor(Color.parseColor("#88FF0000"));
canvas.drawRGB(255, 0, 0);
canvas.drawARGB(127, 255, 0, 0);

練習內(nèi)容2:使用canvas.drawCircle()方法畫圓

一共四個圓:1.實心圓2.空心圓3.藍色實心圓4.線寬為20的空心圓

mPaint.setAntiAlias(true);

canvas.drawCircle(350, 200, 150, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(4);
canvas.drawCircle(700, 200, 150, mPaint);

mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(350, 550, 150, mPaint);

mPaint.setColor(Color.YELLOW);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(50);                   // setStrokeWidth只在STROKE的情況下起作用滋尉,F(xiàn)ILL情況下不起作用
canvas.drawCircle(700, 550, 150, mPaint);

mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
canvas.drawCircle(700, 550, 150, mPaint);

mPaint.reset();

練習內(nèi)容3:使用canvas.drawRect()方法畫矩形

mPaint.setAntiAlias(true);

canvas.drawRect(100, 100, 300, 300, mPaint);

mPaint.setColor(Color.RED);
Rect rect = new Rect(400, 100, 600, 300);
canvas.drawRect(rect, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(4);
RectF rectF = new RectF(700, 100, 900, 300);
canvas.drawRect(rectF, mPaint);

mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(Color.GREEN);
canvas.drawRoundRect(100, 400, 300, 600, 50, 50, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
RectF rectF2 = new RectF(400, 400, 600, 600);
canvas.drawRoundRect(rectF2, 50, 80, mPaint);

mPaint.reset();

練習內(nèi)容4:使用canvas.drawPoint()方法畫點

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(100);
mPaint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawPoint(100, 100, mPaint);

mPaint.setStrokeCap(Paint.Cap.SQUARE);
mPaint.setColor(Color.YELLOW);
canvas.drawPoint(250, 100, mPaint);

mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setColor(Color.RED);
canvas.drawPoint(400, 100, mPaint);

mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setColor(Color.GREEN);
float[] points = {550, 100, 700, 100, 850, 100, 850, 250, 700, 250, 550, 250};
//   canvas.drawPoints(points, mPaint);
canvas.drawPoints(points, 2, 8, mPaint);

mPaint.reset();

練習內(nèi)容5:使用canvas.drawOval()方法畫橢圓

mPaint.setAntiAlias(true);

canvas.drawOval(50, 50, 350, 200, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(4);
mPaint.setColor(Color.RED);
RectF rectF = new RectF(450, 50, 750, 200);
canvas.drawOval(rectF, mPaint);

mPaint.reset();

練習內(nèi)容6:使用canvas.drawLine()方法畫直線

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(10);
canvas.drawLine(50, 50, 200, 200, mPaint);

mPaint.setColor(Color.RED);
canvas.drawLine(100, 50, 250, 200, mPaint);

mPaint.setColor(Color.GREEN);
float[] points = {300, 50, 450, 200, 600, 200, 500, 300};
//   canvas.drawLines(points, mPaint);
canvas.drawLines(points, 2, 4, mPaint);

mPaint.reset();

練習內(nèi)容7:使用canvas.drawRoundRect()方法畫圓角矩形

mPaint.setAntiAlias(true);

canvas.drawRoundRect(100, 100, 500, 300, 50, 50, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(4);
mPaint.setColor(Color.RED);
RectF rectF = new RectF(100, 400, 500, 600);
canvas.drawRoundRect(rectF, 50, 50, mPaint);

mPaint.reset();

練習內(nèi)容8:使用canvas.drawArc()方法畫弧形和扇形

mPaint.setAntiAlias(true);

mPaint.setStyle(Paint.Style.FILL);
canvas.drawArc(200, 100, 800, 500, -110, 100, true, mPaint);
mPaint.setColor(Color.RED);
canvas.drawArc(200, 100, 800, 500, 20, 140, false, mPaint);

mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.GREEN);
canvas.drawArc(new RectF(200, 100, 800, 500), 180, 60, false, mPaint);

mPaint.reset();

練習內(nèi)容9:使用canvas.drawPath()方法畫心形

mPaint.setAntiAlias(true);
Path path = new Path();
path.addArc(new RectF(600, 200, 800, 400), -225, 225);
path.arcTo(new RectF(800, 200, 1000, 400), -180, 225, false);
path.lineTo(800, 542);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawPath(path, mPaint);

mPaint.reset();

練習內(nèi)容10:使用各種Canvas.drawXXX()方法畫直方圖

mPaint.setAntiAlias(true);

// 畫圖表坐標軸
Path path = new Path();
path.moveTo(150, 80);
path.lineTo(150, 500);
path.lineTo(900, 500);
mPaint.setColor(Color.WHITE);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(2);
canvas.drawPath(path, mPaint);

// 畫矩形
Path path2 = new Path();
path2.addRect(170, 490, 250, 500, Path.Direction.CW);
path2.addRect(270, 430, 350, 500, Path.Direction.CW);
path2.addRect(370, 430, 450, 500, Path.Direction.CW);
path2.addRect(470, 380, 550, 500, Path.Direction.CW);
path2.addRect(570, 350, 650, 500, Path.Direction.CW);
path2.addRect(670, 300, 750, 500, Path.Direction.CW);
path2.addRect(770, 400, 850, 500, Path.Direction.CW);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(Color.parseColor("#72B916"));
canvas.drawPath(path2, mPaint);

// 畫文字
mPaint.setColor(Color.WHITE);
mPaint.setTextSize(25);
canvas.drawText("Froyo", 170, 530, mPaint);
canvas.drawText("GB", 290, 530, mPaint);
canvas.drawText("ICS", 390, 530, mPaint);
canvas.drawText("JB", 490, 530, mPaint);
canvas.drawText("KitKat", 580, 530, mPaint);
canvas.drawText("L", 700, 530, mPaint);
canvas.drawText("M", 800, 530, mPaint);

// 畫圖表文字
mPaint.setTextSize(40);
canvas.drawText("直方圖", 450, 650, mPaint);

mPaint.reset();

練習內(nèi)容11:使用各種Canvas.drawXXX()方法畫餅圖

mPaint.setAntiAlias(true);

// 畫6個扇形
mPaint.setColor(Color.parseColor("#FFC107"));
canvas.drawArc(200, 100, 700, 600, -60, 59, true, mPaint);
mPaint.setColor(Color.parseColor("#9C27B0"));
canvas.drawArc(200, 103, 700, 603, 0, 6, true, mPaint);
mPaint.setColor(Color.parseColor("#9E9E9E"));
canvas.drawArc(200, 106, 700, 606, 8, 6, true, mPaint);
mPaint.setColor(Color.parseColor("#009688"));
canvas.drawArc(200, 109, 700, 609, 16, 45, true, mPaint);
mPaint.setColor(Color.parseColor("#2196F3"));
canvas.drawArc(197, 109, 697, 609, 63, 117, true, mPaint);
mPaint.setColor(Color.parseColor("#F44336"));
canvas.drawArc(190, 95, 690, 595, -180, 120, true, mPaint);
mPaint.setColor(Color.WHITE);
mPaint.setTextSize(40);
canvas.drawText("餅圖", 400, 700, mPaint);

mPaint.reset();

最后

扔物線大神的博客地址:HenCoder

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伤极,一起剝皮案震驚了整個濱河市辛辨,隨后出現(xiàn)的幾起案子鹉勒,更是在濱河造成了極大的恐慌,老刑警劉巖恬试,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辩涝,死亡現(xiàn)場離奇詭異,居然都是意外死亡抡草,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門蔗坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來康震,“玉大人,你說我怎么就攤上這事宾濒⊥榷蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵鼎兽,是天一觀的道長答姥。 經(jīng)常有香客問我铣除,道長谚咬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任尚粘,我火速辦了婚禮择卦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郎嫁。我一直安慰自己秉继,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布泽铛。 她就那樣靜靜地躺著尚辑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盔腔。 梳的紋絲不亂的頭發(fā)上杠茬,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音弛随,去河邊找鬼瓢喉。 笑死,一個胖子當著我的面吹牛舀透,可吹牛的內(nèi)容都是我干的栓票。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愕够,長吁一口氣:“原來是場噩夢啊……” “哼走贪!你這毒婦竟也來了佛猛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坠狡,失蹤者是張志新(化名)和其女友劉穎挚躯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擦秽,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡码荔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了感挥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩搅。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖触幼,靈堂內(nèi)的尸體忽然破棺而出硼瓣,到底是詐尸還是另有隱情,我是刑警寧澤置谦,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布堂鲤,位于F島的核電站,受9級特大地震影響媒峡,放射性物質(zhì)發(fā)生泄漏瘟栖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一谅阿、第九天 我趴在偏房一處隱蔽的房頂上張望半哟。 院中可真熱鬧,春花似錦签餐、人聲如沸寓涨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戒良。三九已至,卻和暖如春冠摄,著一層夾襖步出監(jiān)牢的瞬間糯崎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工耗拓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拇颅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓乔询,卻偏偏與公主長得像樟插,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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