溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flutter中CustomPaint怎么用

發布時間:2022-03-14 13:35:44 來源:億速云 閱讀:245 作者:小新 欄目:開發技術

這篇文章主要介紹了Flutter中CustomPaint怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

簡介

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

CustomPaint 介紹

CustomPaint是一個 Widget,其中有三個重要的參數:

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

childCustomPaint的子組件;

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

Flutter中CustomPaint怎么用

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

CustomPainter 示例

有了上面的基礎概念后,我們來一個簡單的示例來演示三個參數的層級關系。我們在backgroundPainter 上繪制一個藍色的正方形,然后傳入一個原型圖片組件作為 child,最后是在 foregroundPainter 上繪制一個半透明的紅色圓形遮住一部分圖片。最終實現效果如下圖,這樣我們可以很好地了解三個元素的關系。

Flutter中CustomPaint怎么用

完整代碼如下:

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);

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Flutter中CustomPaint怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女