android - Canvas doesn't clear clean after drawPath, works fine with drawCircle -
i'm trying draw various shapes. here's view's ondraw
:
protected void ondraw(canvas canvas) { this.invalidate(); canvas.drawcolor(color.white); paint paint = new paint(); paint.setstyle(style.stroke); triangle.setfilltype(filltype.even_odd); triangle.moveto(shape.getx(), shape.gety()); triangle.lineto(shape.getx() - shape.getdiameter(), shape.gety() - shape.getdiameter()); triangle.lineto(shape.getx() + shape.getdiameter(), shape.gety() - shape.getdiameter()); triangle.lineto(shape.getx(), shape.gety()); triangle.close(); canvas.drawpath(triangle, paint); }
triangle
path, shape
class utilize hold coordinates of shapes draw on view. triangle's x
, y
coordinates alter dynamically, shape redrawn @ new position each turn.
but here looks like:
it's of import note there single triangle here, screen beingness inefficiently cleared on each loop.
the exact same code using drawcircle
or drawrect
instead of drawpath
produces clean , clear canvas objects updated position.
i've figure out problem. when using path it's necessary reset on each draw (see line 8):
protected void ondraw(canvas canvas) { this.invalidate(); canvas.drawcolor(color.white); paint paint = new paint(); paint.setstyle(style.stroke); triangle.reset() // <------- add together triangle.setfilltype(filltype.even_odd); triangle.moveto(shape.getx(), shape.gety()); triangle.lineto(shape.getx() - shape.getdiameter(), shape.gety() - shape.getdiameter()); triangle.lineto(shape.getx() + shape.getdiameter(), shape.gety() - shape.getdiameter()); triangle.lineto(shape.getx(), shape.gety()); triangle.close(); canvas.drawpath(triangle, paint); }
android opengl-es path android-canvas shape
No comments:
Post a Comment