2013-06-13 54 views
3
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

public class SingleTouchEventView extends View { 
private Paint paint = new Paint(); 
private Path path = new Path(); 
public boolean cc = false; 

public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(18f); 
    paint.setColor(Color.LTGRAY); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeCap(Paint.Cap.ROUND); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    if(cc) 
    { 
     Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.black_square); 
     Bitmap cb = Bitmap.createScaledBitmap(back, 0, 0, false); 
     canvas.drawBitmap(cb,0,0,null); 
     cc = false; 

    } 
    canvas.drawPath(path, paint); 
} 

public void clearCanvas() 
{ 
    cc =true; 
    invalidate(); 
} 

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

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
    path.moveTo(eventX, eventY); 
    return true; 
    case MotionEvent.ACTION_MOVE: 
    path.lineTo(eventX, eventY); 
    break; 
    case MotionEvent.ACTION_UP: 
    // nothing to do 
    break; 
    default: 
    return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 
    } 
} 

上述文件是我SingleTouchEventView.Java 这是我MainActivity.java如何清除在画布上的Android按钮点击

public class MainActivity extends Activity { 

    Button reset;; 
LinearLayout canvasAlphabets; 
    SingleTouchEventView myView; 


    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 


    reset = (Button)findViewById(R.id.reset_canvas); 

    myView = new SingleTouchEventView(this, null); 
    canvasAlphabets = (LinearLayout)findViewById(R.id.canvas_Alphabets); 
    canvasAlphabets.addView(myView); 


      reset.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


     } 
     }); 

     } 

    } 

我的问题是什么样的代码,我应该在复位按钮用于删除画布的所有内容。 请帮我 我试过执行myView.clearCanvas()但这没有帮助。如果我添加此代码重置点击buutons它引起FC

感谢

+1

我修好了。 path = new Path(); \t \t Paint clearPaint = new Paint(); \t \t clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); \t \t canvas.drawRect(0,0,0,0,clearPaint); \t \t cc = false; 我用这段代码 – Damandeep

回答

5
path = new Path(); 
Paint clearPaint = new Paint(); 
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
canvas.drawRect(0, 0, 0, 0, clearPaint); 
cc = false; 

我用上面的代码修复了它

0

您可以在panit一切与透明色,清除一切。

2

也许我不明白你想画什么,但你尝试过这样的:

protected void onDraw(Canvas canvas) 
{ 
    if (cc) 
    { 
     Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.black_square); 
     Bitmap cb = Bitmap.createScaledBitmap(back, 0, 0, false); 
     canvas.drawBitmap(cb,0,0,null); 
     cc = false; 
    } 
    else 
     canvas.drawPath(path, paint); 
    } 
} 

否则,如果你想删除所有,你可以使用这个新的油漆:

Paint transparent = new Paint(); 
transparent.setAlpha(0); 
+1

里面的代码if(cc) {...}是我试图用来清除画布的那个。 我应该在哪里使用你写的代码? 实际的问题是,如果我尝试使用myView.canvasClear(),它会导致FC – Damandeep

+2

尝试此操作: if(cc) Paint transparent = new Paint(); transparent.setAlpha(0); canvas.drawPath(path,transparent); cc = false; } else canvas.drawPath(path,paint); –

+0

保护无效的onDraw(帆布帆布){ \t如果(CC) \t { \t \t Log.d( “清除-Canavs”, “清除Canavs开始”); \t \t Paint transparent = new Paint(); transparent.setAlpha(0); canvas.drawPath(path,transparent); \t \t cc = false; \t} \t else \t { canvas.drawPath(path,paint); \t} } 现在我正在使用您所说的代码。它按下重置按钮清除画布,但是我所画的所有内容都会在触摸画布时再次出现。在cavas上运行并不会被删除。 – Damandeep