欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android+Flutter實現(xiàn)彩虹圖案的繪制

 更新時間:2022年11月30日 10:36:25   作者:WeninerIo  
彩虹,是氣象中的一種光學(xué)現(xiàn)象,當(dāng)太陽光照射到半空中的水滴,光線被折射及反射,在天空上形成拱形的七彩光譜。接下來,我們就自己手動繪制一下彩虹圖案吧

閑暇時,又聽到了這首歌. 抑郁質(zhì)性格的人難免會惆悵,美好的東西轉(zhuǎn)瞬即逝.不過誰叫咱們是程序員呢~ 這就安排上.整上一個想看就看的彩虹!

玩轉(zhuǎn)彩虹

彩虹,是氣象中的一種光學(xué)現(xiàn)象,當(dāng)太陽光照射到半空中的水滴,光線被折射及反射,在天空上形成拱形的七彩光譜,由外圈至內(nèi)圈呈紅、橙、黃、綠、藍(lán)、靛藍(lán)、藍(lán)紫七種顏色. 相信小伙伴們在大雨過后的不經(jīng)意間都見過吧! 接下來,我們就自己手動繪制一下.一般這種, 我們都會分析一下繪制的步驟.

分析步驟

彩虹實際上就是7道拱橋型狀的顏色堆積,繪制彩虹第一步我們不如先繪制一道拱橋形狀的顏色塊.也就是說, 本質(zhì)上我們繪制一個半圓環(huán)即可解決問題.

繪制半圓環(huán)

在Flutter中, 半圓環(huán)都繪制有很多方法. 比如canvas中,有drawOval(rect,paint) 的方法,這種方法可以繪制出一整個圓環(huán), 我們可以對它作切割即可. 不過這種方法不便利的是它控制不了圓環(huán)的進度, 有沒有一種方法可以讓我們自己去控制圓環(huán)繪制的進度呢? 答案就是Path, 好多伙伴們應(yīng)該都對Path 有過或多或少都了解, 它不僅可以畫直線、三角形、圓錐,更可以畫優(yōu)美的貝塞爾曲線. 這里我們調(diào)用它的acrTo(Rect rect, double startAngle, double sweepAngle, bool forceMoveTo) 方法, 它的參數(shù):

rect: 給定一個矩形范圍,在矩形范圍中繪制弧形. 也就是我們?nèi)绻钦叫蔚脑?實際上繪制的便是一個圓形,如果是長方形的話最終產(chǎn)物就是橢圓形.

startAngle: 起始的角度

sweepAngle: 掃過的角度 實際上這里的坐標(biāo)系和笛卡爾坐標(biāo)系是一樣的, 所以是從x軸開始算的, 也就是順時針方向分別是0 -> pi/2 -> pi -> 3/2pi-> 2pi. 我們假設(shè)startAngle是0的話, sweepAngle為1/3pi, 那么最終的圓弧如圖左示.

forceMoveTo: false的時候,添加一個線段開始于當(dāng)前點,結(jié)束于弧的起點.true時為原點.

理論知識了解完畢以后,我們通過如下代碼進行繪制試一下:

{
    Path path = Path();
    path.moveTo(-width, 0.0);
    path.arcTo(
      Rect.fromCenter(center: Offset.zero, width: width, height: width),
      -pi,
      pi,
      true,
    );
}

結(jié)果如圖:

第一道圓弧已經(jīng)出來了, 說明理論上這樣做可行.

多道圓弧

一道圓弧既然可以了, 我們首先記錄下彩虹的顏色

  final List<Color> colors = const [
    Color(0xFF8B00FF),
    Color(0xFF0000FF),
    Color(0xFF00FFFF),
    Color(0xFF00FF00),
    Color(0xFFFFFF00),
    Color(0xFFFF7F00),
    Color(0xFFFF0000),
  ];

記錄好顏色后, 我們首先回顧一下. 剛剛一道圓弧是怎么繪制的呢? 通過path的arcTo()方法,起始在負(fù)x軸, 終止于x軸.也就是說我們重復(fù)的繪制上七道, 只需要半徑不一樣即可繪制出相互連接的顏色體.

    for (var color in colors) {
      _paint.color = color;
      // 繪制圓弧
      drawArc();
      canvas.drawPath(path, _paint);
      // width 為每到圓弧的半徑
      width += widthStep;
    }

嗯~ 沒錯, 結(jié)果確實和意料的一樣

但是,總覺得有些不完美. 彩虹似乎都是有光暈的吧~

添加光暈

好, 光暈說來這不就來了.實際上我們可以通過畫筆繪制周圍部分作模糊當(dāng)作光暈的形成, 恰恰Paint的mastFilter 也提供了這個方法.

{
    _paint.maskFilter = const MaskFilter.blur(BlurStyle.solid, 6);
}

我們先簡要分析一下MaskFilter.blur() 提供了參數(shù)有哪些用處吧~實際上也就是style和sigma.style控制最終繪制出來的效果.sigma控制效果的大小.這里我們使用BlurStyle.solid就可以繪制出光暈的效果

光暈也有了, 但是我感覺不夠個性. 我希望它可以像扇子一樣展開收起. 我們來看看怎么實現(xiàn).

動畫

實際上控制它的展開收起也就是在path中sweepAngle.我們最小掃過是0弧度,最大是pi. 我們控制了弧度變化也就控制了彩虹的展示大小.直接安排上repeat()動畫

{
    AnimationController _controller = AnimationController(
      vsync: this,
      // 這里需要把最大值改成pi, 這樣才會完全展開
      upperBound: pi,
      duration: const Duration(seconds: 2),
    );
    _controller.repeat(reverse: true);
}

結(jié)果如圖:

源碼:https://github.com/weniner/flutter_demo/blob/main/lib/rainbow/widget/rainbow.dart

到此這篇關(guān)于Android+Flutter實現(xiàn)彩虹圖案的繪制的文章就介紹到這了,更多相關(guān)Android Flutter繪制彩虹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android自定義控件實現(xiàn)可左右滑動的導(dǎo)航條

    Android自定義控件實現(xiàn)可左右滑動的導(dǎo)航條

    這篇文章主要介紹了Android自定義控件實現(xiàn)可左右滑動的導(dǎo)航條,能響應(yīng)快速滑動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android導(dǎo)航欄功能項的顯示與屏蔽介紹

    Android導(dǎo)航欄功能項的顯示與屏蔽介紹

    大家好,本篇文章主要講的是Android導(dǎo)航欄功能項的顯示與屏蔽介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android文本與視圖基本操作梳理介紹

    Android文本與視圖基本操作梳理介紹

    下面介紹一下android如何設(shè)置文本內(nèi)容、設(shè)置文本字體大小、文本顏色、視圖寬高、視圖間距、和視圖的對齊方式,只簡單說明一下如何操作,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Android下拉刷新SwipeRefreshLayout控件使用方法

    Android下拉刷新SwipeRefreshLayout控件使用方法

    這篇文章主要介紹了Android下拉刷新SwipeRefreshLayout控件使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android實現(xiàn)圖片文字輪播特效

    Android實現(xiàn)圖片文字輪播特效

    這篇文章主要介紹了Android圖片文字輪播效果,分別實現(xiàn)圖片和文字自動滾動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Android用戶注冊界面簡單設(shè)計

    Android用戶注冊界面簡單設(shè)計

    這篇文章主要為大家分享了Android用戶注冊界面簡單設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android 文件下載三種基本方式

    Android 文件下載三種基本方式

    這篇文章主要介紹了Android 文件下載三種基本方式,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • 自定義Dialog彈框和其背景陰影顯示方法

    自定義Dialog彈框和其背景陰影顯示方法

    今天小編就為大家分享一篇自定義Dialog彈框和其背景陰影顯示方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Android編程之計時器Chronometer簡單示例

    Android編程之計時器Chronometer簡單示例

    這篇文章主要介紹了Android計時器Chronometer簡單用法,結(jié)合實例形式分析了Android計時器Chronometer的定義、事件響應(yīng)及界面布局相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 詳解android webView獨立進程通訊方式

    詳解android webView獨立進程通訊方式

    本篇文章主要介紹了android webView獨立進程通訊方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論