2016-05-04 194 views
0

我有一个透明的CircleView(它扩展了ImageView,是一个正方形)的问题。我在CircleView上翻译了一个圆形图像。我遇到的问题如下:Android:ViewGroup背景透明度

您看到的灰色背景是RelativeLayout,我想隐藏每个角落,这要感谢我的CircleView的onDraw,因为感谢此功能,我将能够在不显示它在圈子外面。如果需要的话

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

而且我的布局:

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

所以,我要的是画一个透明的背景我的RelativeLayout的的背景下,你有什么想法?

回答

0

你应该做这样的事情在你的onDraw()方法:

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

阅读更多信息:PorterDuff