Soy nuevo en el desarrollo de Android, y he estado tratando durante unas horas ahora de agregar esquinas redondeadas agradables y lisas a un ImageView, sin éxito.Esquinas redondeadas antialias en Android ImageView
Lo primero que intenté fue simplemente redondear las esquinas de mis imágenes directamente, pero esto implica cambiar el mapa de bits, y como necesito conservar las crudas, y esas son bastante grandes, esto no es realmente amigable con la memoria. Esto también causaría otras dificultades ya que mi ImageView es fluido.
Lo segundo que traté de usar es el método clipPath después de la subclasificación de mi vista. Esto funciona, pero las esquinas tienen alias. Luego intenté agregar un PaintFlagsDrawFilter para implementar el aliasing, pero esto no funcionó. Estoy usando monodroid, y me preguntaba si se suponía que funcionaba en Java.
Aquí está mi código (C#):
public class MyImageView : ImageView
{
private float[] roundedCorner;
/**
* Contains the rounded corners for the view.
* You can define one, four or height values.
* This behaves as the css border-radius property
*
* @see http://developer.android.com/reference/android/graphics/Path.html#addRoundRect(android.graphics.RectF, float[], android.graphics.Path.Direction)
*/
public float[] RoundedCorners{
get{
return roundedCorner;
}
set{
float[] finalValue = new float[8];
int i=0;
if(value.Length == 1){
for(i=0; i<8;i++){
finalValue[i] = value[0];
}
}else if(value.Length == 4){
for(i=0; i<4;i++){
finalValue[2*i] = value[i];
finalValue[2*i+1] = value[i];
}
}
roundedCorner = finalValue;
}
}
public SquareImageView (Context context) :
base (context)
{
Initialize();
}
public SquareImageView (Context context, IAttributeSet attrs) :
base (context, attrs)
{
Initialize();
}
private void Initialize()
{
RoundedCorners = new float[]{0,0,0,0};
}
public override void Draw (Android.Graphics.Canvas canvas)
{
Path path = new Path();
path.AddRoundRect(new RectF(0,0, Width,Height),RoundedCorners, Path.Direction.Cw);
canvas.ClipPath(path);
base.Draw (canvas);
}
/**
* try to add antialiasing.
*/
protected override void DispatchDraw (Canvas canvas)
{
canvas.DrawFilter = new PaintFlagsDrawFilter((PaintFlags)1, PaintFlags.AntiAlias);
base.DispatchDraw (canvas);
}
}
Gracias por su ayuda!
Gracias por su respuesta. Pero como ya he dicho, ya he intentado redondear las esquinas de mi imagen, pero dado que necesito un mapa de bits de tamaño fluido, esto implica mantener una referencia al original, y me gustaría evitar esto. Básicamente quiero redondear las esquinas de la vista en sí, como si estuviera usando esta solución: [link] (http://stackoverflow.com/questions/1683185/android-listview-with-rounded-corners) –
Bien @Alex ver este [enlace] (http://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working) –