2016-05-04 4 views
0

Ich habe ein Problem mit einer transparenten CircleView (die ImageView erweitert und ist ein Quadrat). Ich habe ein kreisförmiges Bild über mein CircleView übertragen. Das Problem, auf das ich stoße, ist folgendes:Android: ViewGroup Hintergrund Transparenz

Der graue Hintergrund, den du siehst, ist ein RelativeLayout, ich möchte jede Ecke dank des OnDraw meines CircleView verstecken, weil ich dank dieser Funktion das Bild ohne zu zeigen übersetzen kann es außerhalb des Kreises.

@Override 
protected void onDraw(Canvas canvas) { 
    int circleCenter = getHeight()/2; 
    radius = circleCenter; 
    loadBitmap(); 

    if(hideBackground) { 
     Path circlePath = new Path(); 
     circlePath.addCircle(circleCenter, circleCenter, radius, Path.Direction.CCW); 

     circlePath.setFillType(Path.FillType.INVERSE_EVEN_ODD); 
     paint.setColor(0x00000000); 
     paint.setShader(null); 
     canvas.drawPath(circlePath, paint); 
    } else { 
     if (image != null) { 
      radius -= 5; 
      paint.setShader(computeBitmapShader(image)); 
      canvas.drawCircle(circleCenter, circleCenter, radius, paint); 
     } 
    } 
} 

Und mein Layout, wenn nötig:

<RelativeLayout 
    android:id="@+id/wheel_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="0.45" 
    android:background="#4F4F4F"> 

    <CircleView 
     android:id="@+id/wheel" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:id="@+id/counter" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:textColor="#FFF" 
     android:text="\?" 
     android:textStyle="bold" 
     android:textSize="66dp" 
     android:gravity="center_vertical|center_horizontal" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

Also, was ich will, ist ein transparenter Hintergrund über den Hintergrund meiner RelativeLayout zu ziehen, haben Sie eine Idee?

Antwort

0

Sie sollten in Ihrer onDraw() Methode so etwas tun:

final int color = 0xff424242; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 
    final float roundPx = bitmap.getHeight()/2; 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

dieses Mehr Infos lesen: PorterDuff