2012-04-01 6 views
0

Ich habe die MyView-Klasse aus der FingerPaint API DEMO (aus Here) verwendet und möchte die Ansicht aller gezeichneten Linien löschen können. In der Tat wird es zurückgesetzt, wenn es beim Start der Aktivität zum ersten Mal gerendert wird. Meine MyView-Ansicht ist in meinem XML-Layout deklariert (nicht programmiert).Android MyView (FingerPaint Demo) Zurücksetzen Canvas

Was ist der einfachste Weg, dies mit einer Taste zu tun?

Vielen Dank :)

Antwort

1

habe ich es geschafft, dies zu erreichen, indem die MyView Klasse modifizieren, wie unten:

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

public class MyView extends View { 

    private Bitmap mBitmap; 
    private Canvas mCanvas; 
    private Path mPath; 
    private Paint mBitmapPaint; 
    private Paint mPaint; 
    private List<Path> mPathsArray = new ArrayList<Path>(); 

    public MyView(Context c, AttributeSet attrs) { 
     super(c, attrs); 
     mPaint = new Paint(); 
     mPaint.setColor(0xFF00F1F5); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(6); 

     mPath = new Path(); 
     mBitmapPaint = new Paint(Paint.DITHER_FLAG); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     mCanvas = new Canvas(mBitmap); 
    } 
    public void clear(){ 
     mBitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.ARGB_8888); 
     mPath = new Path(); 
     invalidate(); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 

    private float mX, mY; 
    private static final float TOUCH_TOLERANCE = 4; 

    private void touch_start(float x, float y) { 
     mPath.moveTo(x, y); 
     mX = x; 
     mY = y; 
    } 
    private void touch_move(float x, float y) { 
     float dx = Math.abs(x - mX); 
     float dy = Math.abs(y - mY); 
     if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
      mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
      mX = x; 
      mY = y; 
     } 
    } 
    private void touch_up() { 
     mPath.lineTo(mX, mY); 
     // commit the path to our offscreen 
     mCanvas.drawPath(mPath, mPaint); 
     // kill this so we don't double draw 
     mPathsArray.add(mPath); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     float x = event.getX(); 
     float y = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       touch_start(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
       invalidate(); 
       break; 
     } 
     return true; 
    } 
} 

Nur incase anderen Menschen die gleiche Wirkung erzielen wollen.