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

Flutter繪圖組件之CustomPaint使用詳解

 更新時(shí)間:2022年03月14日 12:01:22   作者:島上碼農(nóng)  
CustomPaint是Flutter中用于自由繪制的一個(gè)widget,它與android原生的繪制規(guī)則基本一致,以當(dāng)前Canves(畫布)的左上角為原點(diǎn)進(jìn)行繪制。本文將詳細(xì)講解CustomPaint的使用教程,需要的可以參考一下

簡(jiǎn)介

在有些場(chǎng)景中,我們會(huì)需要繪制一些高度定制化的組件,比如 UI 設(shè)計(jì)師給我們出了個(gè)難題 —— 弄一個(gè)奇形怪狀的邊框??丛?UI 設(shè)計(jì)師是一個(gè)漂亮小姐姐的份上,又不好意思說這個(gè)做不了(那樣也很沒面子)。這個(gè)時(shí)候我們就不能直接使用 Flutter 自帶的那些組件了,而是需要手動(dòng)繪制組件,那就會(huì)需要用到 CuntomPaint 組件。CustomPaint 組件和前端的 Canvas差不多,允許我們?cè)谝粋€(gè)畫布上繪制各種元素,包括點(diǎn)、線、矩形、圓弧、文字、圖片等等。

CustomPaint 介紹

CustomPaint是一個(gè) Widget,其中有三個(gè)重要的參數(shù):

CustomPaint(
  child: childWidget(),
  foregroundPainter: foregroundPainter(),
  painter: backgroundPainter(),
)

childCustomPaint的子組件;

painterforegroundPainter:都是 CustomPainter 類,用于定義 canvas 繪制的內(nèi)容。區(qū)別在于,首先是執(zhí)行 painter 的繪制指令。然后是在背景上渲染 child 子組件。最后,foregroundPainter 的內(nèi)容會(huì)繪制在 child 上一層。

CustomPainter提供了一個(gè)paint繪圖方法供我們繪制圖形,該方法攜帶canvassize兩個(gè)參數(shù),其中 canvas 是畫布,size 是畫布大小。canvas 提供了很多繪制圖形的方法,比如繪制路徑、矩形、圓形和線條等等。

CustomPainter 示例

有了上面的基礎(chǔ)概念后,我們來一個(gè)簡(jiǎn)單的示例來演示三個(gè)參數(shù)的層級(jí)關(guān)系。我們?cè)?code>backgroundPainter 上繪制一個(gè)藍(lán)色的正方形,然后傳入一個(gè)原型圖片組件作為 child,最后是在 foregroundPainter 上繪制一個(gè)半透明的紅色圓形遮住一部分圖片。最終實(shí)現(xiàn)效果如下圖,這樣我們可以很好地了解三個(gè)元素的關(guān)系。

完整代碼如下:

import 'dart:ui';
import 'package:flutter/material.dart';

class BasicPaintPage extends StatelessWidget {
  const BasicPaintPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
      child: Center(
        child: ClipOval(
          child: Image.asset(
            'images/beauty.jpeg',
            width: 200,
            height: 200,
            fit: BoxFit.fitWidth,
          ),
        ),
      ),
      painter: BackgroundPainter(),
      foregroundPainter: ForegroundPainter(),
    );
  }
}

class BackgroundPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    canvas.drawColor(Color(0xFFF1F1F1), BlendMode.color);
    var center = size / 2;
    var paint = Paint()..color = Color(0xFF2080E5);
    paint.strokeWidth = 2.0;

    canvas.drawRect(
      Rect.fromLTWH(center.width - 120, center.height - 120, 240, 240),
      paint,
    );
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}

class ForegroundPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    var center = size / 2;
    var paint = Paint()..color = Color(0x80F53010);
    paint.strokeWidth = 2.0;

    canvas.drawCircle(
      Offset(center.width, center.height),
      100,
      paint,
    );
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}

其中在背景繪制中我們制定了canvas 的背景色,即下面這行代碼:

canvas.drawColor(Color(0xFFF1F1F1), BlendMode.color);

其他代碼就相對(duì)好理解了,BackgroundPainter 繪制了一個(gè)藍(lán)色正方形,child 是一個(gè)居中的圓形圖片,而 ForegroundPainter 則是在中間繪制了一個(gè)和圓形圖片同等大小的,半透明的紅色圓圈。于是就得到了我們想要的效果。

總結(jié)

本篇介紹了 CustomPaint 的基本使用,可以看到 CustomPaint使用起來并不復(fù)雜,但是真正復(fù)雜的是如何繪制圖形,這個(gè)需要有比較好的數(shù)學(xué)知識(shí)支撐(當(dāng)然,如果確實(shí)不會(huì)也可以搜索相關(guān)資料)。接下來的一篇我們來繪制一些常見的圖形。

到此這篇關(guān)于Flutter繪圖組件之CustomPaint使用詳解的文章就介紹到這了,更多相關(guān)Flutter CustomPaint內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android?優(yōu)雅的讀寫Excel

    Android?優(yōu)雅的讀寫Excel

    這篇文章主要為大家介紹了Android優(yōu)雅的讀寫Excel實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Flutter StatefulBuilder實(shí)現(xiàn)局部刷新實(shí)例詳解

    Flutter StatefulBuilder實(shí)現(xiàn)局部刷新實(shí)例詳解

    這篇文章主要為大家介紹了Flutter StatefulBuilder實(shí)現(xiàn)局部刷新實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 深入了解Android中GestureDetector的定義與使用

    深入了解Android中GestureDetector的定義與使用

    Android中的GestureDetector?可以使用?MotionEvents?檢測(cè)各種手勢(shì)和事件,非常的好用。本文將會(huì)通過幾個(gè)具體的例子來講解一下GestureDetector的具體使用方法,需要的可以參考一下
    2023-01-01
  • Android編程開發(fā)音樂播放器實(shí)例

    Android編程開發(fā)音樂播放器實(shí)例

    這篇文章主要介紹了Android編程開發(fā)音樂播放器,結(jié)合實(shí)例形式分析了Android音樂播放器開發(fā)所涉及的SeekBar,ListView,廣播接收者(以代碼的形式注冊(cè)Receiver),系統(tǒng)服務(wù),MediaPlayer等技巧,需要的朋友可以參考下
    2016-01-01
  • 詳解RecyclerView設(shè)置背景圖片長寬一樣(以GridLayoutManager為例)

    詳解RecyclerView設(shè)置背景圖片長寬一樣(以GridLayoutManager為例)

    這篇文章主要介紹了詳解RecyclerView設(shè)置背景圖片長寬一樣(以GridLayoutManager為例),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • android 退出程序解決內(nèi)存釋放的問題

    android 退出程序解決內(nèi)存釋放的問題

    做Android項(xiàng)目的時(shí)候發(fā)現(xiàn)一個(gè)問題:當(dāng)應(yīng)用程序退出了,點(diǎn)擊"設(shè)置"查看應(yīng)用程序,界面顯示著可以點(diǎn)擊"強(qiáng)制關(guān)閉 由于這個(gè)問題我發(fā)現(xiàn)了一個(gè)更加嚴(yán)重的問題,那就是,在我應(yīng)用程序退出之后,系統(tǒng)并沒有釋放掉我應(yīng)用程序所占內(nèi)存
    2012-11-11
  • Android實(shí)現(xiàn)復(fù)制Assets文件到SD卡

    Android實(shí)現(xiàn)復(fù)制Assets文件到SD卡

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)復(fù)制Assets文件到SD卡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android自定義View圓形進(jìn)度條控件(三)

    Android自定義View圓形進(jìn)度條控件(三)

    這篇文章主要為大家詳細(xì)介紹了Android自定義View圓形進(jìn)度條控件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 如何使用Flutter發(fā)布安卓應(yīng)用

    如何使用Flutter發(fā)布安卓應(yīng)用

    應(yīng)用開發(fā)完了,當(dāng)然需要發(fā)布了,下面來看看用 Flutter 開發(fā)的應(yīng)用如何發(fā)布,本文只關(guān)注 Android 版本的發(fā)布
    2021-05-05
  • Android?組件化神器之Arouter依賴配置使用

    Android?組件化神器之Arouter依賴配置使用

    這篇文章主要為大家介紹了Android?組件化神器之Arouter依賴配置使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論