Ben android dev için yeni ve şimdi bir ImageView'a, başarılı olmadan güzel ve pürüzsüz yuvarlak köşeler eklemek için birkaç saat çalışıyorum.Antialiased yuvarlatılmış köşeleri Android'de ImageView
Denediğim ilk şey, doğrudan resimlerimin köşelerini yuvarlaklaştırmaktır, ancak bu bitmapi değiştirmeyi gerektirir ve ham olanları tutmaya ihtiyacım olduğu için ve bunlar oldukça büyüktür, bu gerçekten bellek dostu değildir. Bu, ImageView'ım sıvı olduğundan, diğer zorluklara da neden olur.
Kullanmaya çalıştığım ikinci şey, görünümümü alt sınıflara ayırdıktan sonra clipPath yöntemidir. Bu çalışır, ancak köşeler takma addır. Daha sonra takma ad uygulamak için bir PaintFlagsDrawFilter eklemeye çalıştı, ancak bu işe yaramadı. Monodroid kullanıyorum ve bunun Java’da çalışması gerektiğini düşünüyordum. Yardımlarınız için
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);
}
}
Teşekkür:
İşte benim kodu (C#) 'dir! kodunun altına
Cevabınız için teşekkür ederiz. Ama dediğim gibi, şimdiye kadar görüntümün köşelerini yuvarlaklaştırmaya çalıştım, ama sıvı büyüklüğünde bir bitmap'e ihtiyaç duyduğumdan, bu orjinal bir referansa işaret etmek anlamına geliyor ve bundan kaçınmak istiyorum. Temel olarak, bu çözümü kullanıyormuşum gibi, görünümün köşelerini yuvarlaklaştırmak istiyorum: [link] (http://stackoverflow.com/questions/1683185/android-listview-with-rounded-corners) –
Okay @Alex bunu görmek [link] (http://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working) –