2014-02-26 36 views
0

我有一個矩形圖像,我轉換爲一個圓形,然後我將該圖像設置爲imageview。然而,我在圓形圖像周圍得到了一個黑色的方形。我需要它來匹配白色佈局的其餘部分。任何人都可以解釋爲什麼? 下面的佈局是一個更大的佈局的一部分,用作列表視圖的佈局。我在一個不同的應用程序中單獨嘗試了這個代碼,它工作正常。該應用程序的xml佈局的默認顏色是白色的,所以也許它仍然在繪製方塊,但我不能看到它?我的原始應用程序中xml的默認顏色是黑色。這是否會導致問題?四捨五入圖像有黑色的正方形

這裏是佈局

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#fff" 
    android:orientation="horizontal" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#fff" > 

     <ImageView 
      android:id="@+id/iv_profile" 
      android:layout_width="90dp" 
      android:layout_height="90dp" /> 
    </RelativeLayout> 
+0

請張貼的截圖和一些你的代碼 – steven0529

+0

發佈你的佈局,並發表您的XML文件,如果你設置爲背景你的Imageview –

回答

0

使用這個類的部分

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Rect; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class RoundedCustomImageView extends ImageView{ 

    public RoundedCustomImageView(Context context) { 
     super(context); 
    } 

    public RoundedCustomImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public RoundedCustomImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     Drawable drawable = getDrawable(); 
     if (drawable == null) { 
      return; 
     } 
     if (getWidth() == 0 || getHeight() == 0) { 
      return; 
     } 

     try { 
      Bitmap b = ((BitmapDrawable) drawable).getBitmap(); 
      Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 
      int w = getWidth(), h = getHeight(); 
      Bitmap roundBitmap = getCroppedBitmap(bitmap, w); 
      canvas.drawBitmap(roundBitmap, 0,0, null); 
     } catch (OutOfMemoryError e) { 
      e.printStackTrace(); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { 
     Bitmap sbmp; 
     if(bmp.getWidth() != radius || bmp.getHeight() != radius) 
      sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); 
     else 
      sbmp = bmp; 
     Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),sbmp.getHeight(), Config.ARGB_8888); 
     //Bitmap output = Bitmap.createBitmap(200,200, Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 
     final int color = 0xffa19774; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); 
     //  final Rect rect = new Rect(0, 0, 200, 200); 
     paint.setAntiAlias(true); 
     paint.setFilterBitmap(true); 
     paint.setDither(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(Color.parseColor("#030302")); 
     canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, 
       sbmp.getWidth()/2+0.1f, paint); 
     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
     canvas.drawBitmap(sbmp, rect, rect, paint); 
     return output; 
    }}