2011-06-30 21 views
6

Zdecydowałem, że plik thumb_rounded.xml umieścił go w folderze res/drawable w mojej aplikacji na Androida. Z tego pliku chcę uzyskać zaokrąglone narożniki w moim ImageViewthat zawiera aktualności kciuk,Android ImageView z zaokrąglonymi narożnikami nie działa

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 
<corners android:radius="13.0dip" /> 
</shape> 

i jestem ustawienie to jako tło mojego ImageView jednak, dont uzyskać zaokrąglone narożniki, obraz pozostaje prostokąt. Czy ktoś ma jakiś pomysł, jak to zdobyć? Chcę osiągnąć ten sam efekt, jak tego ekranu:

B&H first screen

Dziękujemy

T

+0

Spróbuj przyjrzeniu się tym poście: http://stackoverflow.com/questions/2459916/how-to-make-an -imageview-to-have-rounded-rogi – bradley4

+0

Nie sądzę, że możliwe jest dostarczenie zaokrąglonych rogów w ten sposób do ImageView. Będziesz chciał postępować zgodnie z kodem z tego posta: http://stackoverflow.com/questions/2459916/how-to-make-an-imageview-to-have-rounded-corners – wajiw

+0

Pomyślałem, że będzie taka droga bez konieczności używania java, na przykład ... aplikacja Android B & H ma prostokątny obraz z zaokrąglonymi narożnikami na pierwszym ekranie, chciałbym osiągnąć ten sam efekt. – Thiago

Odpowiedz

2

jesteś brakuje parę tagów. Oto nowa próbka:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#ffffff"/>  

    <stroke android:width="3dp" 
      android:color="#ff000000"/> 

    <padding android:left="1dp" 
      android:top="1dp" 
      android:right="1dp" 
      android:bottom="1dp"/> 

    <corners android:radius="30px"/> 
</shape> 

widziany here

Ponadto, jesteś świadomy RoundRectShape?

+1

Twój kod nie zadziałał. Powinno to być zaokrąglony prostokąt z białym tłem większym niż mój obraz ... Spojrzę na RoundRectShape, dzięki @Pedro – Thiago

+0

Właśnie zamieszczałem próbkę, nie dostosowywałem wartości do tych, które chciałeś, ale to powinno to być bardzo proste! –

+0

+1 ... to też jest dla mnie pomocne. Dzięki –

20

go używać,

@Override 
public void onCreate(Bundle mBundle) { 
super.onCreate(mBundle); 
setContentView(R.layout.main); 

ImageView image = (ImageView) findViewById(R.id.img); 
Bitmap bitImg = BitmapFactory.decodeResource(getResources(), 
    R.drawable.default_profile_image); 
image.setImageBitmap(getRoundedCornerImage(bitImg)); 
} 

public static Bitmap getRoundedCornerImage(Bitmap bitmap) { 
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
    bitmap.getHeight(), Config.ARGB_8888); 
Canvas canvas = new Canvas(output); 

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 = 100; 

paint.setAntiAlias(true); 
canvas.drawARGB(0, 0, 0, 0); 
paint.setColor(color); 
canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
canvas.drawBitmap(bitmap, rect, rect, paint); 

return output; 

} 

Tutaj runda Corder jest uzależnione od roundPx.

+0

to nie działa – Sarvesh

+0

dziękuję za pracę dla mnie – KDeogharkar

+0

jak zrobić tryb kafelkowy powtórzyć wraz z zaokrąglonymi rogami? – Goofy

13

Jeśli umieścisz widok na górze ImageView, który działa jak maska, możesz osiągnąć dokładnie taki zaokrąglony efekt obrazu.

spojrzeć na ten przykład:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:background="#ffff" 
    android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/image1" 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:padding="10dp" 
    android:src="@android:color/holo_red_dark" 
    /> 

<View 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_alignLeft="@+id/image1" 
    android:layout_alignTop="@+id/image1" 
    android:layout_margin="00dp" 
    android:background="@drawable/mask" /> 
</RelativeLayout> 

i rozciągliwej mask.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <corners android:radius="50dp" />  
    <solid android:color="#0000"/> 
    <stroke android:color="#ffff" android:width="10dp"/> 
</shape> 

dwie ważne rzeczy:

  1. szerokość skok rozciągliwej maski powinien dopasować dopełnienie ImageView
  2. kolor obrysu Maska do rysowania powinna pasować do koloru tła.
  3. promień narożników maski musi być ustawiony tak, aby odpowiadał szerokości obrysu (aby obraz nie był widoczny za maską).

Próbka produkuje następujący obraz: enter image description here

HTH

+0

co, jeśli tło nie jest jednolitym tłem? ta metoda nie działa dobrze, ponieważ pokazuje zaokrąglone rogi z jednolitym tłem. –

+0

To prawda, to zadziała tylko wtedy, gdy zdefiniuj maskę, która wtapia się w tło (nie musi to być jednak jednolity kolor). –

+0

to jednak fajna sztuczka. lepiej niż inne rozwiązania, jeśli wiesz na pewno, że będzie dobrze komponować się z otoczeniem. –

Powiązane problemy