2017-05-04 3 views
-1

enter image description here Ich hatte versucht, einen Bogen mit der Farbe oben auf dem Bogen zu zeichnen und den unteren Teil des Bogens im Rechteck für die benutzerdefinierte Ansicht zu entfernen. Ich hatte viele stackoverflow Fragen, aber es funktioniert nicht. Der weiße Bereich in der Leinwand muss aus dem folgenden Screenshot entfernt werden. Der Code für die benutzerdefinierte Ansicht wird hier angezeigt. Bitte helfen Sie mir, die Lösung dafür herauszufinden. DankWie entferne ich einen Teil der Leinwand von der quadratischen customview android?

Code:

@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); 

} 

Antwort

2

Verwenden

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); 
    } 

Dies kann Ihnen helfen. Es wird Ihre Farbe löschen und es transparent machen

+0

Ich hatte diesen Code verwendet, aber wenn ich die Hintergrundfarbe für die rect Leinwand festlegen, gibt dieser Code transparente BG für den Bogen. Aber die Hintergrundfarbe kommt in den Vordergrund, was ich in der Leinwand nicht machen möchte –

Verwandte Themen