Ich bin neu bei Android Dev, und ich habe seit ein paar Stunden versucht, fügen Sie schöne und glatte abgerundete Ecken zu einem ImageView, ohne Erfolg.Antialiased abgerundeten Ecken auf Android ImageView
Das erste, was ich ausprobiert habe, ist einfach die Ecken meiner Bilder direkt zu runden, aber das bedeutet, die Bitmap zu ändern, und da ich die rohen behalten muss, und das sind ziemlich große, das ist nicht wirklich speicherfreundlich. Dies würde auch andere Schwierigkeiten verursachen, da mein ImageView flüssig ist.
Zweite Sache, die ich versuchte zu verwenden, ist die ClipPath-Methode nach Unterklassen meiner Ansicht. Das funktioniert, aber Ecken sind Alias. Ich habe dann versucht, einen PaintFlagsDrawFilter hinzuzufügen, um das Aliasing zu implementieren, aber das hat nicht funktioniert. Ich benutze monodroid, und ich fragte mich, ob das in Java funktionieren sollte.
Hier ist mein Code (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);
}
}
Vielen Dank für Ihre Hilfe!
Danke für Ihre Antwort. Aber wie gesagt, ich habe bereits versucht, die Ecken meines Bildes abzurunden, aber da ich eine Bitmap in flüssiger Größe benötige, bedeutet dies, dass ich einen Verweis auf das Original halte, und das möchte ich vermeiden. Grundsätzlich möchte ich die Ecken der Ansicht selbst runden, als ob ich diese Lösung verwenden würde: [link] (http://stackoverflow.com/questions/1683185/android-listview-with-rounded-corner) –
Okay @Alex Siehe hierzu [link] (http://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working) –