2012-12-19 14 views
6

我有一個ImageView的和我試圖創建圓角,嘗試了所有從這個職位的解決方案:How to make an ImageView with rounded corners?但是毫無效果。這裏是我的XML機器人試圖圓位圖的角落

<RelativeLayout 
    android:id="@+id/RL_ImageHolder" 
    android:layout_width="150dp" 
    android:layout_height="180dp" 
    android:layout_alignBottom="@+id/relativeLayout2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/relativeLayout2" 
    android:layout_marginLeft="10dp" > 

    <ImageView 
     android:id="@+id/imgPreview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:contentDescription="Preview" 

     /> 
</RelativeLayout> 

這就是我如何使用在帖子中提到的方法我上面鏈接設置的ImageView:

圖像設置正確,但它使一個矩形。任何想法,爲什麼它不工作?

編輯:剛剛發現,只有當持有圖像的佈局具有固定的寬度/高度時才起作用。想一想如何管理它。謝謝你們

+0

檢查:[Android配方#1,帶圓角的圖像](http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners) [Romain Guy](http://stackoverflow.com/users/298575/romain-guy) –

回答

7

嘗試用下面的代碼片段:

public static Bitmap GetCurveImage(Bitmap bitmap) { 
     // Bitmap myCoolBitmap = ... ; // <-- Your bitmap you 
     // want rounded 
     int w = bitmap.getWidth(), h = bitmap.getHeight(); 

     // We have to make sure our rounded corners have an 
     // alpha channel in most cases 
     Bitmap rounder = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(rounder); 

     // We're going to apply this paint eventually using a 
     // porter-duff xfer mode. 
     // This will allow us to only overwrite certain pixels. 
     // RED is arbitrary. This 
     // could be any color that was fully opaque (alpha = 
     // 255) 
     Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     xferPaint.setColor(Color.RED); 

     // We're just reusing xferPaint to paint a normal 
     // looking rounded box, the 20.f 
     // is the amount we're rounding by. 
     canvas.drawRoundRect(new RectF(0, 0, w, h), 5.0f, 5.0f, xferPaint); 

     // Now we apply the 'magic sauce' to the paint 
     xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 

     Bitmap result = Bitmap.createBitmap(bitmap.getWidth(), 
       bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas resultCanvas = new Canvas(result); 
     resultCanvas.drawBitmap(bitmap, 0, 0, null); 
     resultCanvas.drawBitmap(rounder, 0, 0, xferPaint); 

     return result; 
    } 

希望它會幫助你。

+4

通過調用Canvas.drawRect()並在Paint上設置BitmapShader,可以用更少的代碼和更高效的方式實現它。 –

+0

@RomainGuy:是的,你是對的。對不起,我直到現在才知道它。你的建議非常好,當我需要在我的項目中應用圓形圖像時,Straight Forward.i將應用您的代碼。謝謝。 :) –