2017-10-25 7 views
0

번호 :Flutter에서 사용자 정의 페인트의 원점을 변경하는 방법은 무엇입니까? <code>CustomPaint</code>위한

return new Scaffold(
    body: 
    new GestureDetector(
     onTap:() { 
      debugPrint("hello"); 
     }, 
     child: 
      new Container(
       alignment: FractionalOffset.center, 
       child: new CustomPaint(

        size: new Size(400.0, 400.0), 
        painter: new BarChartPainter(currentHeight), 
    ))), 
); 


    //x axis code 
    canvas.drawLine(new Offset(0.0, 0.0), new Offset(500.0, 0.0), paintAx);``` 

X 축 코드 (500,0) 내지 (0,0)로부터의 라인을 그리는 것이라고 Paint의 상자의 상단에있다. 원점은 상자의 왼쪽 상단에 있습니다. 페인트 상자의 왼쪽 하단에 (0,0)이되도록 원점을 어떻게 변경합니까? enter image description here

답변

0

난 당신이 Canvas 영역의 원점을 조작 할 수있는 방법을 정말 확실하지 않다 : 여기

는 스크린 샷입니다. 그러나 Offset 좌표에 translation을 적용 할 수 있습니다. 그러면 원하는 위치에 줄을 배치 할 수 있습니다.

나는이 간단한 예제를 만들었

, 그것은 도움이 될 수 있습니다

enter image description here

import "package:flutter/material.dart"; 


void main() { 
    runApp(new MaterialApp(home: new MyApp(), 
)); 
} 

class MyApp extends StatefulWidget { 
    @override 
    _MyAppState createState() => new _MyAppState(); 
} 

class _MyAppState extends State<MyApp> { 
    CustomPaint _myCustomPainter = new CustomPaint(

    size: new Size(400.0, 400.0), 
    painter: new Line(), 
); 

    @override 
    Widget build(BuildContext context) { 
    final key = new GlobalKey<ScaffoldState>(); 
    return new Scaffold(
     key: key, 
     body: 
     new GestureDetector(
     onTap:() { 
      debugPrint("hello"); 
     }, 
     child: 
     new Container(
      alignment: FractionalOffset.center, 
      child: _myCustomPainter 
     ), 
    ),); 
    } 
} 


class Line extends CustomPainter { 

    @override 
    void paint(Canvas canvas, Size size) { 
    // canvas.translate(0.0, 100.0); 
    canvas.drawLine(new Offset(100.0, -50.0).translate(0.0, 100.0), 
     new Offset(0.0, 100.0).translate(0.0, 100.0), 
     new Paint() 
    ); 
    } 

    @override 
    bool shouldRepaint(Line oldDelegate) { 
    // Since this Line painter has no fields, it always paints 
    // the same thing, and therefore we return false here. If 
    // we had fields (set from the constructor) then we would 
    // return true if any of them differed from the same 
    // fields on the oldDelegate. 
    return false; 
    } 
}