java - Drawing a Bezier curve Android drawing app is very slow -


i have been working on android drawing application, meant draw bezier line, based upon user interaction. user draws line on screen , appears have drawn it.

@override public boolean ontouchevent(motionevent event) {     touchx = event.getx();     touchy = event.gety();      switch (event.getaction()) {         case motionevent.action_down:             drawingelement = new drawingelement(gridtype, canvaswidth, canvasheight);             drawingelement.addpoint(touchx, touchy);             break;         case motionevent.action_move:             drawingelement.addpoint(touchx, touchy);             break;         case motionevent.action_up:             drawingelement.addpoint(touchx, touchy);                  actualdrawingelement = new drawpath(gridtype, canvaswidth, canvasheight, drawpaint, paintcolor, brushsize);                 actualdrawingelement.setdrawingelementtype(drawingelementtype.path);              actualdrawingelement.setpoints(drawingelement.getpoints());             drawingelement = actualdrawingelement;             actualdrawingelement = null;             finishedelement = true;              break;         default:             return false;     }     //draw view - called after touch event @override protected void ondraw(canvas canvas) {      if(bgpaint == null) {         bgpaint = new paint();         bgpaint.setcolor(color.white);     }     canvas.drawrect(0, 0, getwidth(), getheight(), bgpaint);      bitmap dbbmp =  null;     bitmapsave bitmapsave = getdatabasehandler().getlastsave();     if(bitmapsave != null) {         dbbmp = bitmapsave.getbitmap().copy(bitmap.config.argb_8888, true);     } else {         dbbmp = bitmap.createbitmap((int) getactualwidth(), (int) getactualheight(), bitmap.config.argb_8888);     }     canvas dbcanvas = new canvas(dbbmp);      drawpath p;     if(drawingelement != null && drawingelement.getpointcount() > 0) {         actualdrawingelement = new drawpath(gridtype, canvaswidth, canvasheight, drawpaint, paintcolor, brushsize);         actualdrawingelement.setdrawingelementtype(drawingelementtype.path);         actualdrawingelement.setpoints(drawingelement.getpoints());         p = (drawpath)actualdrawingelement;         p.draw(dbcanvas);         p = null;      }      if(finishedelement) {         db.addsave(new bitmapsave(dbbmp));     }     canvas.drawbitmap(dbbmp, 0, 0, drawpaint);      if(displaygrid) {         drawgrid drawgrid = new drawgrid(gridtype, canvaswidth, canvasheight, bgpaint);         drawgrid.draw(canvas);     }      updateundoredobuttons(); } 

the above code shows ondraw , ontouchevent methods. moved using database store bitmaps started lot of memory overload errors , crash. had multiple bitmaps in memory undo/redo inside arraylist (would max. 3 or 4 before crashing). have @ least 20 undos/redos (in total) in app.

in end meant draw multiple lines @ same time, 1 line slow.

i have tried abstract few things happening, eg. line drawing... store points in separate class, grabs them later on draw.

abstracted line drawing method is...

public void draw(canvas canvas) {      boolean firstrun = true;      point2d prevpoints = null;     point2d points = null;     for(point2d pointgrp : getpoints()) {         points = getcalculatedpoints(pointgrp);             if (firstrun) {                 paths.add(new path());                 paths.get(0).moveto(points.getposx(), points.getposy());             } else {                 paths.get(0).quadto(prevpoints.getposx(), prevpoints.getposy(), points.getposx(), points.getposy());             }         firstrun = false;         prevpoints = points;     }      canvas.drawpath(paths.get(0), getpaint()); } 

at stage "points = getcalculatedpoints(pointgrp);" literally returns same point give. point2d object holds pointx, , pointy nothing else. has no methods other getters , setters.

any ideas why running slow? picks 4 points across massive line, making jagged , straight.


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -