Sono nuovo di Android Dev, e ho cercato per un paio d'ore ora di aggiungere angoli arrotondati piacevole e liscia a un ImageView, senza successo.Angoli arrotondati antialias su Android ImageView
prima cosa che ho provato è semplicemente per arrotondare gli angoli di direttamente le mie immagini, ma questo implica cambiare la bitmap, e dal momento che ho bisogno di mantenere quelle prime, e quelli sono abbastanza grande, questo non è davvero la memoria amichevole. Ciò causerebbe anche altre difficoltà dal momento che il mio ImageView è fluido.
La seconda cosa che ho provato ad usare è il metodo clipPath dopo la sottoclasse della vista. Funziona, ma gli angoli sono alias. Ho quindi provato ad aggiungere un PaintFlagsDrawFilter per implementare l'aliasing, ma questo non ha funzionato. Sto usando monodroid, e mi chiedevo che questo avrebbe dovuto funzionare in Java.
Ecco il mio codice (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);
}
}
Grazie per il vostro aiuto!
Grazie per la risposta. Ma come ho già detto, ho già provato a arrotondare gli angoli della mia immagine, ma poiché ho bisogno di una bitmap a dimensione fluida, ciò implica mantenere un riferimento a quello originale, e vorrei evitarlo. Fondamentalmente voglio aggirare gli angoli della vista stessa, come se stessi usando questa soluzione: [link] (http://stackoverflow.com/questions/1683185/android-listview-with-rounded-corners) –
Okay @Alex vedi questo [collegamento] (http://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working) –