-10
A
回答
14
您可以使用GestureDetector
創建一個簽名區域來記錄觸摸,並使用CustomPaint
在屏幕上繪製。這裏有幾個技巧:
- 使用
RenderBox.globalToLocal
由GestureDetector.onPanUpdate
提供的DragUpdateDetails
轉換成相對座標 - 使用
GestureDetector.onPanEnd
手勢處理機記錄筆畫之間的斷裂。 - 突變
List
將不會自動觸發重繪因爲CustomPainter
構造函數參數是相同的。每次提供新點時,都可以通過創建新的List
來觸發重繪。 - 使用
Canvas.drawLine
在簽名的每個記錄點之間繪製一條圓形線。
import 'package:flutter/material.dart';
class SignaturePainter extends CustomPainter {
SignaturePainter(this.points);
final List<Offset> points;
void paint(Canvas canvas, Size size) {
Paint paint = new Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;
for (int i = 0; i < points.length - 1; i++) {
if (points[i] != null && points[i + 1] != null)
canvas.drawLine(points[i], points[i + 1], paint);
}
}
bool shouldRepaint(SignaturePainter other) => other.points != points;
}
class Signature extends StatefulWidget {
SignatureState createState() => new SignatureState();
}
class SignatureState extends State<Signature> {
List<Offset> _points = <Offset>[];
Widget build(BuildContext context) {
return new GestureDetector(
onPanUpdate: (DragUpdateDetails details) {
setState(() {
RenderBox referenceBox = context.findRenderObject();
Offset localPosition =
referenceBox.globalToLocal(details.globalPosition);
_points = new List.from(_points)..add(localPosition);
});
},
onPanEnd: (DragEndDetails details) => _points.add(null),
child: new CustomPaint(painter: new SignaturePainter(_points)),
);
}
}
class DemoApp extends StatelessWidget {
Widget build(BuildContext context) => new Scaffold(body: new Signature());
}
void main() => runApp(new MaterialApp(home: new DemoApp()));
+0
此代碼似乎不再適用於顫動的測試版。我嘗試過仿真器和真實設備(Pixel 2),但沒有畫在屏幕上。 – xrd
相關問題
- 1. 如何從撲翼飛鏢應用程序調用手機設置?
- 2. 使用飛鏢爲移動應用程序
- 3. 爲什麼我的撲翼應用程序的listview滾動不如撲動畫廊應用程序光滑?
- 4. 撲動/飛鏢開發驗證郵件
- 5. 在飛鏢中創建換行符
- 6. 飛鏢+聚合物作爲網頁/應用程序/擴展程序無法在飛鏢編輯器外工作
- 7. 飛鏢與Maven(在春季啓動應用程序)
- 8. 飛鏢與原生移動庫調用
- 9. 爲應用程序動態創建子域名
- 10. 如何從撲翼應用程序發送打印日誌?
- 11. 將命令行參數傳遞給撲翼應用程序
- 12. 使用谷歌飛鏢語言的原生移動應用程序
- 13. 在飛鏢中動態加載課程
- 14. Chrome擴展程序+飛鏢
- 15. 從撲翼應用打電話
- 16. 在飛鏢編輯器中自動生成飛鏢
- 17. 在flex應用程序中限制鼠標移動區域
- 18. 飛鏢Web_Audio飛鏢1.6
- 19. 將飛鏢板劃分爲不同的區域?
- 20. 在Rails應用程序中創建管理區域
- 21. 飛鏢中的飛鏢websocket:io and dart:html
- 22. 如何在我的撲翼應用中添加自定義過渡到我的撲翼路線
- 23. 創建移動應用程序/網站
- 24. 創建移動詞典應用程序
- 25. 飛鏢程序中的拼寫檢查
- 26. 如何創建一個飛鏢形式
- 27. 從Javascript數組創建飛鏢列表
- 28. 創建角度飛鏢網絡通知
- 29. 飛鏢中的簡單命令行應用程序I/O
- 30. 計劃在Chrome應用程序的飛鏢套接字API
我們不鼓勵的帖子,簡單地陳述問題斷章取義,並期望社會來解決它。假設你試圖自己解決它並陷入困境,那麼如果你寫下了你的想法和你無法想象的東西,這可能會有所幫助。添加你的代碼的[mcve],並描述你有什麼問題。 _「但它不起作用」_不是很有幫助。 – Cerbrus
你的程序[不起作用](http://importblogkit.com/2015/07/does-not-work/)? –
刪除選民可以解釋他們的投票嗎?在這裏發佈的答案似乎相當有幫助.... – user000001