2016-05-23 94 views
0

在我的应用程序中,需要在图像上绘制一个圆。现在我使用画布和Canvas拥有此图像。我的要求是,我先画一个半径为20的圆,然后在第二次清除前一个圆并绘制一个25半径的圆,等等。如何在android中清除画布?

以下是我的Fragment代码。

import android.app.Activity; 
    import android.content.pm.ActivityInfo; 
    import android.graphics.Color; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.support.v4.app.FragmentManager; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.Button; 

    /** 
    * Created by user on 5/23/2016. 
    */ 
    public class StepTwentyOneFragment extends Fragment { 

     private CanvasView customCanvas; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.step21_fragment, container, false); 
      customCanvas=(CanvasView)v.findViewById(R.id.signature_canvas); 

      final Button button1=(Button)v.findViewById(R.id.step18button1); 

      button1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        if(v.getId()==R.id.step18button1){ 

         customCanvas.clear2(); 

         v.setBackgroundResource(R.drawable.button_border_5); 
         button1.setTextColor(Color.WHITE); 

        } 
       } 
      }); 





      return v; 
     } 

     public static StepTwentyOneFragment newInstance() { 

      StepTwentyOneFragment f = new StepTwentyOneFragment(); 
      Bundle b = new Bundle(); 

      f.setArguments(b); 

      return f; 
     } 


     @Override 
     public void setUserVisibleHint(boolean isVisibleToUser) { 
      super.setUserVisibleHint(isVisibleToUser); 
      if(isVisibleToUser) { 
       Activity a = getActivity(); 
       if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      } 
     } 

下面是我如何绘制图像和圆。我的Fragment班学习这门课。

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PorterDuff; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Toast; 

/** 
* Created by user on 4/28/2016. 
*/ 
public class CanvasView extends View { 

    public int width; 
    public int height; 
    private Bitmap mBitmap; 
    private Canvas mCanvas; 
    private Path mPath; 
    Context context; 
    private Paint mPaint; 
    private float mX, mY; 
    private static final float TOLERANCE = 5; 

    public CanvasView(Context c, AttributeSet attrs) { 
     super(c, attrs); 
     context = c; 

     mPath = new Path(); 

     mPaint = new Paint(); 
     mPaint.setStrokeWidth(3); 
     mPaint.setColor(Color.CYAN); 
    } 

    // override onDraw 
    @Override 
    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 

     mCanvas=canvas; 

     Drawable d = getResources().getDrawable(R.drawable.circle_1); 

     int canvasHeight= canvas.getHeight(); 
     int canvasWidth= canvas.getWidth(); 

     Log.d("Height - ","/"+canvas.getHeight()); 
     Log.d("Width - ","/"+canvas.getWidth()); 

//   DisplayMetrics displaymetrics = new DisplayMetrics(); 
//  ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
//  int height = displaymetrics.heightPixels; 
//  int width = displaymetrics.widthPixels; 

     float h=canvasHeight/2; 
     float w=canvasWidth/2; 
     float r=(canvasWidth/2) - ((canvasWidth/2)/100)*20; 

     d.setBounds(0, 0, canvasWidth, canvasHeight); 
     d.draw(canvas); 

     canvas.drawCircle(w, h, r, mPaint); 
    } 

    public void clear2(){ 

     mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 

     Drawable d = getResources().getDrawable(R.drawable.circle); 

     int canvasHeight= mCanvas.getHeight(); 
     int canvasWidth= mCanvas.getWidth(); 

     Log.d("Height - ","/"+mCanvas.getHeight()); 
     Log.d("Width - ","/"+mCanvas.getWidth()); 

//   DisplayMetrics displaymetrics = new DisplayMetrics(); 
//  ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
//  int height = displaymetrics.heightPixels; 
//  int width = displaymetrics.widthPixels; 

     float h=canvasHeight/2; 
     float w=canvasWidth/2; 
     float r=(canvasWidth/2) - ((canvasWidth/2)/100)*20; 

     d.setBounds(0, 0, canvasWidth, canvasHeight); 
     d.draw(mCanvas); 
     mCanvas.restore(); 

    } 

} 

但是,问题是我根本无法清除Canvas。即使我有一个名为clear2的方法,它不会清除任何内容。另外我不确定一旦清除完成后如何画出另一个圆圈。我相信这个“​​绘图”代码必须在我的Fragment类中?请帮忙。

+1

Canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR) –

+0

@AmitVaghela:已经完成了。 – Barrier

回答

1

您可以重新设置路径一样,

mPath.reset(); 

在这之后,你可以画出你的新路径。

这可能有助于你

+0

可以用更多的细节来解释这个答案吗?因为这不起作用? – Barrier

0

我想你应该改变这样的:

mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 

mCanvas.drawColor(Color.WHITE) 

我想这是因为,因为你正在绘制在整个画布上用透明颜色,它实际上并不影响画布。因此,你仍然可以看穿前一帧。