2012-12-19 13 views
6

Tôi có một IMAGExem và và tôi đang cố gắng để tạo góc tròn, thử tất cả các giải pháp từ bài đăng này: How to make an ImageView with rounded corners? Nhưng không có gì làm việc .. Dưới đây là XML của tôiandroid cố gắng để làm tròn các góc bitmap

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

và đó là cách tôi đặt ImageView bằng cách sử dụng phương pháp được đề cập trong bài đăng mà tôi đã liên kết ở trên:

Hình ảnh được đặt chính xác nhưng giữ hình chữ nhật .. Mọi ý tưởng tại sao nó không hoạt động?

CHỈNH SỬA: chỉ phát hiện ra rằng không chỉ hoạt động khi bố cục giữ hình ảnh có chiều rộng cố định/chiều cao .. Gotta nghĩ cách quản lý điều đó. Thanks guys

+0

kiểm tra: [Công thức Android # 1, hình ảnh có góc tròn] (http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners) bởi [Romain Guy] (http://stackoverflow.com/users/298575/romain-guy) –

Trả lời

7

thử với Dưới Đoạn Mã:

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

Hy vọng nó sẽ giúp bạn.

+4

Có thể đạt được ít mã hơn và hiệu quả hơn bằng cách gọi Canvas.drawRect() và thiết lập một BitmapShader trên Paint. –

+0

@RomainGuy: Có, bạn đúng. Xin lỗi tôi đã không nhận thức về nó cho đến bây giờ. Đề xuất của bạn là thực sự tốt đẹp và thẳng Forward.i sẽ áp dụng mã của bạn khi tôi cần phải áp dụng hình ảnh tròn trong dự án của tôi. Cảm ơn. :) –