亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用Flutter實現(xiàn)手寫簽名效果

 更新時間:2022年12月24日 15:27:13   作者:Jerry815  
Flutter插件提供了用于繪制平滑簽名的簽名板,下面這篇文章主要給大家介紹了關(guān)于如何使用Flutter實現(xiàn)手寫簽名效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

思路

  • 需要監(jiān)聽用戶觸摸的起始點和結(jié)束點,并記錄途經(jīng)點,這里我使用了StreamController
  • 將途經(jīng)點從起始位置到結(jié)束位置繪制出來,這里用到CustomPainter

繪制流程

  • 獲取觸摸點作為畫筆的起始點
  • 手機途經(jīng)點
  • 繪制途徑路線
  • 結(jié)束觸摸點重置畫筆

具體實現(xiàn)

需要一個Listener用來監(jiān)聽用戶行為,并將這些行為的點添加到StreamController中, 兩個變量

final List _points = []; //承載對應(yīng)的點
final StreamController _controller = StreamController(); //數(shù)據(jù)通信

Widget _buildWriteWidget() {
  return Stack(
    children: [
      Listener( //用來監(jiān)聽用戶的觸摸行為
        child: Container(
          color: Colors.transparent,
        ),
        onPointerDown: (PointerDownEvent event) {
          _points.add(event.localPosition);
          _controller.sink.add([_points]);  //起始點的記錄
        },
        onPointerMove: (PointerMoveEvent event) {
          _points.add(event.localPosition);
          _controller.sink.add([_points]);  //添加途經(jīng)點
        },
        onPointerUp: (PointerUpEvent event) {
          _points.add(Offset.zero); //結(jié)束的標(biāo)記
        },
      ),
      StreamBuilder(
          stream: _controller.stream,
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            return snapshot.hasData
                ? CustomPaint(painter: LinePainter(snapshot.data))  //關(guān)聯(lián)數(shù)據(jù)到Painter
                : const SizedBox();
          }),
      Positioned(
          bottom: 50,
          right: 50,
          child: FloatingActionButton(
            onPressed: () {
              _clear();
            },
            child: const Icon(Icons.cleaning_services),
          ))
    ],
  );
}

清除StreamController的內(nèi)容,重置數(shù)據(jù)

void _clear() {
  _points.clear();
  _controller.add(null);
}

dispose時釋放StreamController

@override
void dispose() {
  _controller.close();
  super.dispose();
}

畫筆Painter

class LinePainter extends CustomPainter {
  final List<List<Offset>> lines;
  final Color paintColor = Colors.black;
  final Paint _paint = Paint();

  LinePainter(this.lines);

  @override
  void paint(Canvas canvas, Size size) {
    _paint.strokeCap = StrokeCap.round;
    _paint.strokeWidth = 5.0;
    if (lines.isEmpty) {
      canvas.drawPoints(PointMode.polygon, [Offset.zero, Offset.zero], _paint);
    } else {
      for (int i = 0; i < lines.length; i++) {
        for (int j = 0; j < lines[i].length - 1; j++) {
          if (lines[i][j] != Offset.zero && lines[i][j + 1] != Offset.zero) {
            canvas.drawLine(lines[i][j], lines[i][j + 1], _paint);  //繪制相應(yīng)的點
          }
        }
      }
    }
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
}

總結(jié)

到此這篇關(guān)于如何使用Flutter實現(xiàn)手寫簽名效果的文章就介紹到這了,更多相關(guān)Flutter手寫簽名效果內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android Service生命周期詳解

    Android Service生命周期詳解

    Android Service 生命周期可以促使移動設(shè)備的創(chuàng)新,讓用戶體驗到最優(yōu)越的移動服務(wù),只有broadcast receivers執(zhí)行此方法的時候才是激活的,當(dāng) onReceive()返回的時候,它就是非激活狀態(tài)
    2015-11-11
  • Retrofit + OkHttp緩存處理的示例代碼

    Retrofit + OkHttp緩存處理的示例代碼

    本篇文章主要介紹了Retrofit + OkHttp緩存處理的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Android中父View和子view的點擊事件處理問題探討

    Android中父View和子view的點擊事件處理問題探討

    當(dāng)屏幕中包含一個ViewGroup,而這個ViewGroup又包含一個子view,這個時候android系統(tǒng)如何處理Touch事件呢,接下來將對此問題進行深入了解,感興趣的朋友可以了解參考下,或許對你有所幫助
    2013-01-01
  • Android實現(xiàn)多張圖片合成加載動畫

    Android實現(xiàn)多張圖片合成加載動畫

    這篇文章主要為大家詳細介紹了Android實現(xiàn)多張圖片合成加載動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Flutter 使用Navigator進行局部跳轉(zhuǎn)頁面的方法

    Flutter 使用Navigator進行局部跳轉(zhuǎn)頁面的方法

    這篇文章主要介紹了Flutter 使用Navigator進行局部跳轉(zhuǎn)頁面的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 深入了解Android?IO的底層原理

    深入了解Android?IO的底層原理

    這篇文章主要介紹了深入了解Android?IO的底層原理,IO有緩沖與非緩沖?IO、直接與非直接?IO、阻塞與非阻塞?IO、同步與異步?IO等分類,具體詳情感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • Android使用CoordinatorLayout實現(xiàn)底部彈出菜單

    Android使用CoordinatorLayout實現(xiàn)底部彈出菜單

    這篇文章主要為大家詳細介紹了Android使用CoordinatorLayout實現(xiàn)底部彈出菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android利用Document實現(xiàn)xml讀取和寫入操作

    Android利用Document實現(xiàn)xml讀取和寫入操作

    這篇文章主要為大家詳細介紹了Android利用Document實現(xiàn)xml讀取和寫入操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 自定義視圖view使用Canvas實現(xiàn)手寫板和涂鴉功能

    自定義視圖view使用Canvas實現(xiàn)手寫板和涂鴉功能

    這篇文章主要介紹了自定義視圖view使用Canvas實現(xiàn)手寫板和涂鴉功能,這里直接上代碼,里面有詳細講解和注釋,需要的朋友可以參考下
    2023-04-04
  • Android自定義View仿支付寶輸入六位密碼功能

    Android自定義View仿支付寶輸入六位密碼功能

    跟選擇銀行卡界面類似,也是用一個PopupWindow,不過輸入密碼界面是一個自定義view,當(dāng)輸入六位密碼完成后用回調(diào)在Activity中獲取到輸入的密碼并以Toast顯示密碼。這篇文章主要介紹了Android自定義View仿支付寶輸入六位密碼功能的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論