android toile supprimer chemin dessiné

Je fais une application de dessin, et souhaite la mise en place d'une fonction annuler pour supprimer la précédente immédiate chemin tracé.

De codage:

private HashMap<Integer, Path> pathMap; //current Paths being drawn
private HashMap<Integer, Point> previousPointMap; //current Points
private Bitmap bitmap; //drawing area for display or saving
private Canvas bitmapCanvas; //used to draw on bitmap
private Paint paintScreen; //use to draw bitmap onto screen
private Paint paintLine; //used to draw lines onto bitmap
public DrawView(Context context, AttributeSet attrs) 
{
super(context, attrs); //pass context to View's constructor
this.context_new=context;
paintScreen = new Paint(); //used to display bitmap onto screen
//set the initial display settings for the painted line
paintLine = new Paint();
paintLine.setAntiAlias(true); //smooth edges of drawn line
paintLine.setColor(Color.BLACK); //default color is black
paintLine.setStyle(Paint.Style.STROKE); //solid line
paintLine.setStrokeWidth(5); //set the default line width
paintLine.setStrokeCap(Paint.Cap.ROUND); //rounded line ends
pathMap = new HashMap<Integer, Path>();
previousPointMap = new HashMap<Integer, Point>();
} //end DrawView constructor
@Override
protected void onDraw(Canvas canvas)  
{
canvas.drawBitmap(bitmap, 0, 0, paintScreen); 
for (Integer key : pathMap.keySet()) 
canvas.drawPath(pathMap.get(key), paintLine);
} 
//called when the user finishes a touch    
private void touchEnded(int lineID)   
{
Path path = pathMap.get(lineID); //get the corresponding Path
bitmapCanvas.drawPath(path, paintLine); //draw to bitmapCanvas
path.reset(); //reset the Path
rememberLineId = lineID;
} //end method touch_ended
//undo       
private void undo()
{
Path path = pathMap.get(rememberLineId); //get the corresponding Path
pathMap.remove(rememberLineId);
bitmapCanvas.clearPath(path, paintLine); 
path.reset(); //reset the Path
} 

Question:

Cependant, il semble qu'il n'y est pas bitmapCanvas.clearPath cette méthode? Si alors comment pourrait-il être modifié?

Codes Modifié:

Déclarations:

private Bitmap bitmap; //drawing area for display or saving
private Canvas bitmapCanvas; //used to draw on bitmap
private Paint paintScreen; //use to draw bitmap onto screen
private Paint paintLine; //used to draw lines onto bitmap
private HashMap<Integer, Path> pathMap; //current Paths being drawn
private HashMap<Integer, Point> previousPointMap; //current Points
private Bitmap bitmapBackup; 

OnSizeChanged

@Override
public void onSizeChanged(int w, int h, int oldW, int oldH)
{ 
super.onSizeChanged(w, h, oldW, oldH);
DoodlzViewWidth = w;    
DoodlzViewHeight = h;
bitmapBackup = Bitmap.createBitmap(getWidth(), DoodlzViewHeight, Bitmap.Config.ARGB_8888);     
bitmap =       Bitmap.createBitmap(getWidth(), DoodlzViewHeight, Bitmap.Config.ARGB_8888);
bitmapCanvas = new Canvas(bitmap);
bitmap      .eraseColor(Color.WHITE); //erase the BitMap with white 
bitmapBackup.eraseColor(Color.WHITE); 
} 

FirsttoBackup méthode, va appeler lorsque les ci-dessous TouchedStart effectue

public void firsttobackup()
{ 
bitmapBackup=bitmap;
Toast message = Toast.makeText(getContext(), "backuped 123", Toast.LENGTH_SHORT);
message.show(); //THIS TOAST CAN BE SUCESSFULLY PRESENTED when touching screen starting to draw
} 

OnDraw

@Override
protected void onDraw(Canvas canvas) 
{
canvas.drawBitmap(bitmap, 0, 0, paintScreen); 
for (Integer key : pathMap.keySet()) 
canvas.drawPath(pathMap.get(key), paintLine); 

}

OnTouchEvent

@Override
public boolean onTouchEvent(MotionEvent event) 
{        
int action = event.getActionMasked(); //event type 
int actionIndex = event.getActionIndex(); //pointer (i.e., finger)
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) 
{
firsttobackup(); //TOAST CAN SHOW "BACKUP 123"
touchStarted(event.getX(actionIndex), event.getY(actionIndex), 
event.getPointerId(actionIndex));
}

Annuler: utilisateur en appuyant sur le bouton annuler utilisera ce

public void undo()
{
bitmap = bitmapBackup.copy(Bitmap.Config.ARGB_8888, true);
bitmapCanvas = new Canvas(bitmap);        
}  

Question de révision:

Une méthode firsttobackup() est maintenant utilisé tel que bitmapBackup aurait set = bitmap lors de l'exécution de OnTouchEvent touchStarted. J'ai mis un toast en lui et il est sucesfully à être présenté "sauvegarde 123" lorsque l'utilisateur appuie sur l'écran et a commencé à dessiner.

Lorsque l'utilisateur clique sur le bouton annuler, il invoquera la undo méthode, mais maintenant, en appuyant sur le bouton annuler, aucune action ne peut être vu...pourquoi?

Merci!!

  • Il n'est pas clair, parce que la seule chose qui pénètre, est ce que vous dessinez. S'il vous plaît montrer onDraw.
  • onDraw partie est ajoutée dans la question...merci!
InformationsquelleAutor pearmak | 2013-02-13