2012-12-19 22 views
6

Mam ImageView i i próbuję tworzyć zaokrąglone narożniki, próbował wszystkich rozwiązań z tego postu: How to make an ImageView with rounded corners? Ale nic nie działało .. Oto mój XMLandroid próbuje zaokrąglić narożniki 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> 

i to w jaki sposób ustawić ImageView użyciu metody wymienione w poście mam umieszczonego powyżej:

obraz jest ustawiony prawidłowo, ale utrzymuje prostokąt .. Jakieś pomysły dlaczego to nie działa?

EDYCJA: Właśnie się dowiedziałeś, że nie działa tylko wtedy, gdy układ trzymający obraz ma stałą szerokość/wysokość. Musisz pomyśleć, jak to zrobić. Dzięki chłopaki

+0

zaznacz: [Android Recipe # 1, obraz z zaokrąglonymi narożnikami] (http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners) przez [Romain Guy] (http://stackoverflow.com/users/298575/romain-guy) –

Odpowiedz

7

spróbować z poniżej kod urywek:

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

nadzieję, że to pomoże.

+4

Można to osiągnąć za pomocą mniejszej ilości kodu i bardziej efektywnie, wywołując Canvas.drawRect() i ustawiając BitmapShader na Farbie. –

+0

@RomainGuy: Tak, masz rację. Przykro nam, że do tej pory nie wiedziałem o tym. Twoja sugestia jest naprawdę dobra, a Straight Forward.i zastosuje Twój kod, gdy będę potrzebować zastosować zaokrąglony obraz w moim projekcie. Dzięki. :) –