Canvasã®å©ç¨ã«ã¤ãã¦
ãFlutterã®CanvasãHTMLã®Canvasãåãããã«ä½ãæåããã¦ããªããã£ã³ãã¹ï¼ç½ç´ï¼ã®é¨åã§ããããã«ããã°ã©ã ãç¨ãã¦ãæåãå³å½¢ããããã¯ç·ãç»åãªã©æ§ã ãªæåãå¯è½ã§ãã
ããããã£ã¦ãã©ã®ãããªè¡¨ç¤ºã§ãã£ã¦ããã®Canvasã使ãã°çè«ä¸ã¯è¡ãã¾ããããããå¤ãã®å ´åã«ã¯ç°¡åãªãã£ã¼ããç»åæä½ã®è£å©ãªã©ãããéã«ä½¿ããªã©ãå¤ãã¨æãã¾ãã®ã§ãä»åã¯ãã®ãããªå©ç¨ãåæã¨ãã¦ç´¹ä»ãã¾ãã
æ¬æ ¼çãªæåãå©ç¨ãè¡ãã©ã¤ãã©ãª
ãCanvasãç¨ãã¦æ¬æ ¼çãªãã£ã¼ãã2Dã²ã¼ã ãä½ãããå ´åã«ã¯ãå¤ãã®å ´åã¯Canvasã®APIãç´æ¥ä½¿ããã以ä¸ã®ãããªã©ã¤ãã©ãªã使ãã¨è¯ãã§ãããã
- ãã£ã¼ãã使ããããã®ã©ã¤ãã©ãª
- 2Dã²ã¼ã ã使ããããã®ã©ã¤ãã©ãª
ãä¼¼ããããªã©ã¤ãã©ãªã¯ãã以å¤ã«ãããã¨æãã¾ããä¾ãã°ãä¸è¨ã®ãããªããæ±ç¨çã§å°éçãªãã®ããããã£ã¨å ·ä½çãªå©ç¨ã«ç¹åãããã®ãéå®çãªå©ç¨ã®ã¿ãã«ãã¼ãããã®ãªã©ãããã調ã¹ãã¨ããã¯ãã§ãã
ããããã®ã©ã¤ãã©ãªãå©ç¨ããå ´åã«ããä»åç´¹ä»ããåºæ¬é¨åã ãã§ãçè§£ãã¦ããã°ãèªåãå©ç¨ãããç®çã«å¿ãã¦å¯¾å¿ã§ããã±ã¼ã¹ãå¤ããªãã¯ãã§ãã
Canvasã®ä¸»ãªä½¿ãæ¹
ãCanvasã«ã¯ãå³1ã®ããã«ç»é¢ã«è¡¨ç¤ºããUIãããã¯é¨åã¨ãã¦å©ç¨ããå ´åã¨ãé表示ç¨ã«ããã°ã©ã ã§ç»å使ã®ããã«å©ç¨ããå ´åãããã¾ããããä¸è¬çãªä½¿ãæ¹ã¯åè ã ã¨æãã¾ãããç»åããé¨åçã«é åãæãåºãã¦è¡¨ç¤ºããéã®ãè£æ¹ã®ç·¨éç¨ã¨ãã¦Canvasãå©ç¨ãããã¨ãå¯è½ã§ãã
表示é¨åã¨ãã¦Canvasãå©ç¨ããæµã
ã表示ç¨ã®é¨åã¨ãã¦Canvasãå©ç¨ããå ´åã«ã¯ãCustomPaintã¨ããã¦ã£ã¸ã§ãããå©ç¨ãã¾ãã
ããªã¹ã1ã¯ãCustomPaintãã¤ãã£ã¦ãCanvasãå©ç¨ããå ´åã®ã³ã¼ãä¾ã§ãã
@override
Widget build(BuildContext context) {
return Scaffold(
appBar : AppBar(
title : const Text("ãµã³ãã«1")
),
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: CustomPaint(
// ï¼1ï¼å®éã«Canvasã§æåãããå¦ç
painter: SamplePainter(),
),
),
);
}
ãå®éã®Canvasæä½ã¯CustomPainterã¨ããã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹ã§è¡ãããã®æå®ãï¼1ï¼ã®ããã«è¡ãã¾ããã¾ããå®éã«Canvasæä½ãè¡ãSamplePainterã§ã¯ãªã¹ã2ã®ããã«paintã¡ã½ããã¨shouldRepaintã¡ã½ãããå®è£ ãã¾ãã
class SamplePainter extends CustomPainter{
@override
void paint(Canvas canvas, Size size) {
// ï¼1ï¼ãã®ã¡ã½ããå
ã§canvasæä½ãè¡ã
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
// ï¼2ï¼åæåã®å¤å®
return false;
}
}
ãï¼1ï¼ã®paintã¡ã½ããå ã§Canvasã«å¯¾ãã¦æåå¦çãè¨è¿°ãã¾ããããã¦ãï¼2ï¼ãåæåãå¿ è¦ãã®å¤å®å¦çã«ãªãã¾ããæç»ã®åå¦çã¯é常ã®Widgetã®åæåã§ããbuildã§ãè¡ããã¾ããããã¡ãã¯ãCanvasã®åæåã«ãªãã¾ããCanvasã§ã¢ãã¡ã¼ã·ã§ã³ãå©ç¨è ããã®ã¤ã³ã¿ã©ã¯ãã£ããªæä½ã«å¿ããåæåãªã©ãå¿ è¦ãªããã°ãfalseã¨åºå®å¤ãè¿ãããã«ãã¦åé¡ããã¾ããã
é表示é¨åã¨ãã¦Canvasãå©ç¨ããæµã
ãé表示ã®Canvasã¨ãã¦å©ç¨ããå ´åã«ã¯ãCanvasãªãã¸ã§ã¯ãã使ããå¿ è¦ãããã¾ãã
ããã®éã«ã¯ãPictureRecorderã¨ããCanvasã§æåããå 容ããã¨ã§ãã¼ã¿ã¨ãã¦å©ç¨ããããã®ã¯ã©ã¹ã¨å ±ã«ç¨ãã¾ãããªã¹ã2ã¯ãã®ã³ã¼ãä¾ã§ãã
// ï¼1ï¼ å¿ è¦ãªã¤ã³ãã¼ãå¦ç import 'dart:ui' as ui; // ã»ã»ã» çç¥ // ï¼2ï¼ ç»åè¨é²ç¨ã¯ã©ã¹ var pictureRecorder = ui.PictureRecorder(); // ï¼3ï¼ Canvasã®ä½æ ui.Canvas canvas = ui.Canvas(pictureRecorder); // // Canvasæä½ãè¡ã // // ï¼4ï¼ ãµã¤ãºãæå®ãã¦ç»åãåå¾ ui.Image newImage = await pictureRecorder.endRecording().toImage(width,height); // ã»ã»ã» çç¥
ãï¼1ï¼ã§ã¯å¿ è¦ãªã¯ã©ã¹ã使ãããã«dart:uiãã¤ã³ãã¼ããã¾ããã¾ããImageã¯ã©ã¹ãªã©ã¯ãflutter/materialã®ããã±ã¼ã¸å ã®å¥ãªã¯ã©ã¹ã¨ååããã¶ãããããã§ã¯å¥åãã¤ãã¦ãã¾ãã
ãããã¦ãï¼2ï¼ã§ãã£ã³ãã¹ã«æåããå 容ãè¨é²ããããã®ã¯ã©ã¹ã使ãããã®ã¯ã©ã¹ãã¤ãã£ã¦ï¼3ï¼ã®ããã«ãã£ã³ãã¹ã使ãã¾ãã
ããã¨ã¯ãCanvasã¸å¥½ããªæåãè¡ããæå¾ã«ï¼4ï¼ã®ããã«ç»åãã¼ã¿ãåå¾ãããããªæµãã«ãªãã¾ãã
