2011-06-30 37 views
6

He definido el archivo thumb_rounded.xml y lo coloqué dentro de la carpeta res/drawable en mi aplicación para Android. Con este archivo quiero conseguir esquinas redondeadas en mi ImageViewthat contiene el pulgar de noticias,Android ImageView con esquinas redondeadas no funciona

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

y me pongo esto como fondo de mi ImageView, sin embargo, no me llevo las esquinas redondeadas, la imagen sigue siendo un rectángulo. ¿Alguien tiene alguna idea sobre cómo conseguir eso? Quiero lograr el mismo efecto que esta pantalla:

B&H first screen

Muchas gracias

T

+0

Trate de tomar un vistazo a este post: http://stackoverflow.com/questions/2459916/how-to-make-an -imageview-to-have-rounded-esquinas – bradley4

+0

No creo que sea posible proporcionar esquinas redondeadas como esa a un ImageView. Deberá seguir el código de esta publicación: http://stackoverflow.com/questions/2459916/how-to-make-an-imageview-to-have-rounded-corners – wajiw

+0

Pensé que habría una manera sin tener que usar Java, por ejemplo ... la aplicación de Android B & H tiene una imagen rectangular con esquinas redondeadas en la primera pantalla, me gustaría lograr el mismo efecto. – Thiago

Respuesta

2

te falta un par de etiquetas. He aquí una nueva muestra:

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

Visto en here

Además, ¿es consciente de RoundRectShape?

+1

Su código no funcionó. Debe ser un rectángulo redondeado con fondo blanco más grande que mi imagen ... Echaré un vistazo a RoundRectShape, gracias @Pedro – Thiago

+0

Estaba publicando una muestra, no estaba adaptando los valores a los que quería, pero debería ser muy simple para hacer eso! –

+0

+1 ......... también es útil para mí. Gracias –

20

usarlo,

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

} 

Aquí, Corder redonda es depende de roundPx.

+0

esto no parece funcionar – Sarvesh

+0

gracias a que funciona para mí – KDeogharkar

+0

cómo hacer que el modo mosaico se repita junto con las esquinas redondeadas? – Goofy

13

Si coloca una vista en la parte superior del ImageView que funciona como una máscara, puede lograr exactamente ese efecto de imagen redondeada.

echar un vistazo a este ejemplo:

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

y una dibujable 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> 

Dos cosas importantes:

  1. la anchura del trazo de la máscara debe dibujable coinciden con el relleno del ImageView
  2. el color de trazo de la máscara dibujable debe coincidir con el color de fondo.
  3. El radio de las esquinas de la máscara se debe ajustar para que coincida con el ancho de la carrera (para que no vea la imagen detrás de la máscara).

La muestra produce la siguiente imagen: enter image description here

HTH

+0

¿y si el fondo no es un fondo sólido? este método no funcionará bien ya que muestra el área de esquinas redondeadas con un fondo sólido. –

+0

eso es cierto, esto solo funcionará si puede definir una máscara que se mezcle con el fondo (sin embargo, no necesita ser un color sólido). –

+0

es un truco genial. mejor que otras soluciones en caso de que esté seguro de que se combinará bien con su entorno. –