2017-05-04 2 views
-1

enter image description here J'avais essayé de tracer un arc avec la couleur remplie sur le dessus de l'arc et enlevant la partie inférieure de l'arc dans le rectangle de vue personnalisé. J'avais traversé beaucoup de questions de stackoverflow mais son ne fonctionne pas. La zone blanche du canevas doit être supprimée de la capture d'écran ci-dessous. Le code de la vue personnalisée est affiché ici. Aidez-moi à trouver la solution pour cela. MerciComment faire pour supprimer une partie de la toile à partir de customview android carré?

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

} 

Répondre

2

Utilisez

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

Cela peut vous aider. Cela effacera votre couleur et la rendra transparente

+0

J'avais utilisé ce code mais quand j'ai défini la couleur de fond pour la toile rect, ce code donne la bg transparente pour l'arc. Mais la couleur de fond vient au premier plan que je ne veux pas faire dans la toile –