2017-09-13 9 views
0

Pathにポイントを追加しようとしていますが、その間に線を引いていますが、何も表示されません。私はログに期待される結果を考えて見ることができますListに新しいポイントを追加する際にAndroid。キャンバス。 Dinamicallyパスポイントを追加する

public class Point { 
private float x, y; 

...getters and setters 
} 

、しかし:

public class BreakDownBar extends View { 
private List<Point> points = new ArrayList<>(); 
private Path path = new Path(); 
private Paint p = new Paint(); 

public BreakDownBar(Context context) { 
    super(context); 
} 

public BreakDownBar(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    p.setStrokeWidth(5); 
    p.setStyle(Paint.Style.STROKE); 
} 

public void addPoint(Point point) { 
    points.add(point); 
    path.rewind(); 
    reDraw(); 
} 

public void startPoint(Point point) { 
    points.add(point); 
} 

private void reDraw() { 
    Canvas canvas = new Canvas(); 
    path.moveTo(points.getFirst().getX(), points.getFirst().getY()); 
    for (int i = 1; i < points.size(); i++) { 
     path.lineTo(points.get(i).getX(), points.get(i).getY()); 
    } 


    canvas.drawPath(path, p); 
    canvas.drawColor(Color.BLACK); 
    draw(canvas); 
    invalidate(); 
} 

}

ポイントclass

私は、カスタムビューを持っています画面上で何も起こりません。

画面にラインを表示していないのは何ですか?

答えて

1

回線を引き出すために間違ったロジックを使用しています。invalidate()に電話すると、draw()へのコールが要求され、キャンバスがリセットされます。

は、あなたのクラスのこのバージョンで試してみてください:

public class BreakDownBar extends View { 
    private List<Point> points = new ArrayList<>(); 
    private Path path = new Path(); 
    private Paint p = new Paint(); 

    public BreakDownBar(Context context) { 
     super(context); 
     p.setStrokeWidth(5); 
     p.setStyle(Paint.Style.STROKE); 
     p.setColor(Color.BLACK); 
    } 

    public void addPoint(Point point) { 
     points.add(point); 
     //this will request a call to draw(canvas) method 
     invalidate(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     super.draw(canvas); 
     //move to the first point in the list 
     path.moveTo(points.get(0).getX(), points.get(0).getY()); 
     for (int i = 1; i < points.size(); i++) { 
      path.lineTo(points.get(i).getX(), points.get(i).getY()); 
     } 
     canvas.drawPath(path, p); 
    } 
} 

は、次に、あなたのコードでは、単にこれはあなたのために働くなら、私に教えてください
BreakDownBar bar = new BreakDownBar(context); 
bar.addPoint(new Point(100f, 200f)) 
bar.addPoint(new Point(200f, 300f)) 
bar.addPoint(new Point(400f, 200f)) 

を行うことができます。

+1

説明ありがとうございます。 –

+0

ありがとう、幸運:) – MatPag

関連する問題