Flutter-CustomPaint

CustomPaint

介紹:
一個小部件,它提供了一個畫布脆烟,在繪制階段可以在上面繪制

繼承關(guān)系:

Object > Diagnosticable > DiagnosticableTree > Widget > RenderObjectWidget > SingleChildRenderObjectWidget > CustomPaint

繼承自SingleChildRenderObjectWidget的控件,不能用setState的方式來刷新它

構(gòu)造方法:

CustomPaint({Key key, CustomPainter painter, CustomPainter foregroundPainter, Size size: Size.zero, bool isComplex: false, bool willChange: false, Widget child })

常用屬性:

foregroundPainter → CustomPainter 用來繪制前景的工具
painter → CustomPainter 繪制工具
isComplex → bool 是否需要cache
size → Size 畫布大小
willChange → bool 是否需要cache
child → Widget 一般不寫

代碼示例:

class CustomPaintSample extends CustomPainter {
  //繪制流程
  @override
  void paint(Canvas canvas, Size size) {
    Paint p = new Paint();
    p.color = Colors.blue;//畫筆顏色
    p.isAntiAlias = true;//是否抗鋸齒
    p.style = PaintingStyle.fill;//畫筆樣式:填充
    canvas.drawCircle(size.center(Offset(0.0, 0.0)), size.width / 2, p);
  }

  //刷新布局的時候告訴flutter 是否需要重繪
  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return true;
  }
}

效果:


image.png

拓展:

Flutter中Paint和Canvas和Android中的其實非常類似,也是畫筆和畫布,通過CustomPainter銜接使用,實現(xiàn)paint()繪制方法和shouldRepaint()在刷新布局時是否需要重繪.

Paint:

介紹:
在畫布上繪畫時使用的樣式描述,Canvas上的大多數(shù)api都使用一個Paint對象來描述用于該操作的樣式。

常用屬性:

blendMode ? BlendMode 顏色混個模式

color ? Color 畫筆顏色

colorFilter ? ColorFilter 顏色渲染模式,一般是矩陣效果來改變

filterQuality ? FilterQuality 顏色渲染模式質(zhì)量:高磕瓷、中螺句、低

invertColors ? bool

isAntiAlias ? bool 是否抗鋸齒

maskFilter ? MaskFilter 模糊折照效果: nomal內(nèi)外模糊;solid:內(nèi)部填充外部模糊;outer內(nèi)部透明外邊模糊;inner:內(nèi)部模糊,外邊正常;

shader ? Shader 著色器,繪制漸變效果

strokeCap ? StrokeCap 筆觸線帽類型:round、butt敌蚜、square 包括三種類型:默認為butt即初始點到終止點;square:在初始點與終止點繪制一個方塊;round:在初始點與終止點繪制一個圓角

strokeJoin ? StrokeJoin 線結(jié)合處:銳角、圓弧
窝爪、直線

strokeMiterLimit ? double

strokeWidth ? double 畫筆粗細

style ? PaintingStyle 畫筆樣式,填充弛车、描邊;PaintingStyle.fill:填充 PaintingStyle.stroke為描邊

Canvas

介紹:
用于記錄圖形化操作的接口。理解為畫布,畫布是一個矩形區(qū)域,可以繪制;
canvas擁有多種繪制點蒲每、線纷跛、路徑、矩形邀杏、圓形贫奠、以及添加圖像的方法;

常用API:

drawArc(Rect rect, double startAngle, double sweepAngle, bool useCenter, Paint paint) → void 繪制弧、餅

drawAtlas(Image atlas, List<RSTransform> transforms, List<Rect> rects, List<Color> colors, BlendMode blendMode, Rect cullRect, Paint paint) → void 繪制地圖使用

drawCircle(Offset c, double radius, Paint paint) → void 繪制圓形,僅需設(shè)置原點及半徑

drawColor(Color color, BlendMode blendMode) → void 繪制背景顏色 倆個參數(shù):第一個為色值,第二個為混合模式

drawDRRect(RRect outer, RRect inner, Paint paint) → void 繪制嵌套矩形,第一個參數(shù):外部矩形,第二個參數(shù)內(nèi)部矩形,最后一個參數(shù)為paint畫筆

drawImage(Image image, Offset p, Paint paint) → void 將圖片繪制到畫布中

drawLine(Offset p1, Offset p2, Paint paint) → void 繪制線

drawOval(Rect rect, Paint paint) → void 繪制橢圓

drawPaint(Paint paint) → void 用畫筆填充

drawParagraph(Paragraph paragraph, Offset offset) → void 繪制文字

drawPath(Path path, Paint paint) → void 繪制路徑 drawPath 常用方法:
moveTo():當前坐標點開始
lineTo():起點繪制到設(shè)置的新起點
close():點到點的連接
reset():重置,清空連線
addRect():添加矩形連線
addOval():添加弧線

drawPoints(PointMode pointMode, List<Offset> points, Paint paint) → void 繪制點、線

drawRect(Rect rect, Paint paint) → void繪制矩形

drawRRect(RRect rrect, Paint paint) → void 繪制圓角矩形

drawShadow(Path path, Color color, double elevation, bool transparentOccluder) → void 繪制陰影

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叮阅,一起剝皮案震驚了整個濱河市刁品,隨后出現(xiàn)的幾起案子泣特,更是在濱河造成了極大的恐慌浩姥,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状您,死亡現(xiàn)場離奇詭異勒叠,居然都是意外死亡,警方通過查閱死者的電腦和手機膏孟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門眯分,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柒桑,你說我怎么就攤上這事弊决。” “怎么了魁淳?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵飘诗,是天一觀的道長。 經(jīng)常有香客問我界逛,道長昆稿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任息拜,我火速辦了婚禮溉潭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘少欺。我一直安慰自己喳瓣,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布赞别。 她就那樣靜靜地躺著夫椭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氯庆。 梳的紋絲不亂的頭發(fā)上蹭秋,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音堤撵,去河邊找鬼仁讨。 笑死,一個胖子當著我的面吹牛实昨,可吹牛的內(nèi)容都是我干的洞豁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丈挟!你這毒婦竟也來了刁卜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曙咽,失蹤者是張志新(化名)和其女友劉穎蛔趴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體例朱,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡孝情,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洒嗤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箫荡。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渔隶,靈堂內(nèi)的尸體忽然破棺而出羔挡,到底是詐尸還是另有隱情,我是刑警寧澤间唉,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布绞灼,位于F島的核電站,受9級特大地震影響终吼,放射性物質(zhì)發(fā)生泄漏镀赌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一际跪、第九天 我趴在偏房一處隱蔽的房頂上張望商佛。 院中可真熱鬧,春花似錦姆打、人聲如沸良姆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玛追。三九已至,卻和暖如春闲延,著一層夾襖步出監(jiān)牢的瞬間痊剖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工垒玲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陆馁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓合愈,卻偏偏與公主長得像叮贩,于是被迫代替她去往敵國和親击狮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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