2017-05-04 6 views
-1

enter image description here 나는 원호 위에 채워진 색으로 호를 그리고 사용자 정의 직사각형에서 원호의 아래 부분을 제거하려고 시도했다. 나는 stackoverflow 많은 질문을했지만 그 작동하지 않았다. 캔버스의 흰색 영역을 아래 스크린 샷에서 제거해야합니다. customview에 대한 코드가 여기에 표시됩니다. 이 문제를 해결하는 데 도움을주십시오. 감사합니다사각형 customview 안드로이드에서 캔버스의 일부를 제거하는 방법?

코드 :

@Override 
protected void onDraw(Canvas canvas) { 
    float size = Math.min(getWidth(), getWidth()); 
    RectF rectRectF = new RectF(0, 0, getWidth(), getHeight()); 
    Path rectPath = new Path(); 
    rectPath.addRect(rectRectF, Path.Direction.CCW); 
    Paint bgPaint = new Paint(); 
    bgPaint.setColor(Color.RED); 
    canvas.drawPath(rectPath, bgPaint); 
    RectF rectF = new RectF(0, 0, 2 * getWidth(), 2 * getWidth()); 
    Paint transparentPaint = new Paint(); 
    transparentPaint.setColor(Color.WHITE); 
    transparentPaint.setAntiAlias(true); 
    canvas.drawArc(rectF, 180, 90, true, transparentPaint); 

} 

답변

2

사용

private Canvas bitMapCanvas; 
    private Bitmap frameBitmap; 
    private Paint paint; 
    private PorterDuffXfermode porterDuffXfermode; 
    @Override 
     protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     // first time setup 
     if (bitMapCanvas == null) { 
      bitMapCanvas = new Canvas(); 
      frameBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
      bitMapCanvas.setBitmap(frameBitmap); 
    porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR); 

     } 
     super.onSizeChanged(w, h, oldw, oldh); 
     } 

@Override 
    protected void onDraw(Canvas canvas) { 
..... 
.... 
    paint.setXfermode(porterDuffXfermode); 
    bitMapCanvas.drawArc(rectF, 180, 90, true, paint); 
canvas.drawBitmap(frameBitmap, 0, 0, null); 
    } 

이 당신을 도울 수 있습니다. 그것은 당신의 색깔을 지울 것이고 투명하게 만들 것입니다.

+0

저는이 코드를 사용 했었지만 rect 캔버스의 배경색을 설정할 때,이 코드는 호에 투명한 bg를줍니다. 하지만 캔버스에서하고 싶지 않은 배경색이 전경에 온다. –