Android Xamarin上的圆形图像视图
我正在开发Xamarin Android应用程序,我需要制作一个循环Android Xamarin上的圆形图像视图,android,xamarin,imageview,xamarin.android,Android,Xamarin,Imageview,Xamarin.android,我正在开发Xamarin Android应用程序,我需要制作一个循环ImageView 如何做到这一点?我使用这个库。它是用Java编写的,但是您可以轻松地使用它。一旦这样做,您只需将其添加到.axml: <RoundedImageView local:riv_corner_radius="15dp" local:riv_oval="false" android:scaleType="centerCrop" android:layout_width="30d
ImageView
如何做到这一点?我使用这个库。它是用Java编写的,但是您可以轻松地使用它。一旦这样做,您只需将其添加到.axml
:
<RoundedImageView
local:riv_corner_radius="15dp"
local:riv_oval="false"
android:scaleType="centerCrop"
android:layout_width="30dp"
android:layout_height="30dp" />
为未来读者编辑:我基于本文链接的库,为Xamarin.Android编写了一个RoundedImageView
端口。可以找到源代码和NuGet包。MvvmCross还包括一个MVXroundeImage视图
public class CircleDrawable : Drawable
{
Bitmap bmp;
BitmapShader bmpShader;
Paint paint;
RectF oval;
public CircleDrawable (Bitmap bmp)
{
this.bmp = bmp;
this.bmpShader = new BitmapShader (bmp, Shader.TileMode.Clamp, Shader.TileMode.Clamp);
this.paint = new Paint () { AntiAlias = true };
this.paint.SetShader (bmpShader);
this.oval = new RectF ();
}
public override void Draw (Canvas canvas)
{
canvas.DrawOval (oval, paint);
}
protected override void OnBoundsChange (Rect bounds)
{
base.OnBoundsChange (bounds);
oval.Set (0, 0, bounds.Width (), bounds.Height ());
}
public override int IntrinsicWidth {
get {
return bmp.Width;
}
}
public override int IntrinsicHeight {
get {
return bmp.Height;
}
}
public override void SetAlpha (int alpha)
{
}
public override int Opacity {
get {
return (int)Format.Opaque;
}
}
public override void SetColorFilter (ColorFilter cf)
{
}
}
来源:请参考以下链接:
以上代码适用于本机android。您需要调整代码,将其转换为c#语法,并采用xamarin android。为方便起见,我已将代码改为c
参考链接:
===========================================================================
将Refractored.controls.CircleImageView的引用从nuget软件包添加到您的项目中。Xamarin组件也可用于该项目,您可以检查它到目前为止您尝试了什么?我们不想浪费你的时间,建议你知道不适合你的东西。当你需要很多圆形的时候,这样做不是一个好主意。另一种方法是屏蔽一个普通的图像视图,就像谷歌在社交网站和其他地方的“圆形”头像视图一样。你有任何在大型应用程序上运行的基准测试,但没有做出这样的声明吗?我在一个相当大的回收视图中使用了这个,我没有任何性能问题。此外,OP没有指定他需要的形状数量,所以我相信这会完成任务。我在具有ListView的较慢的双核设备上遇到问题(数千个条目,这并不重要),sql游标适配器滚动将开始滞后,并且计时分析会得出simpel覆盖速度更快的结论。。。我的评论应该只指向那个可能的瓶颈,而不是任何真正的问题,因为这个解决方案至少比叠加更干净、可读性更好shapes@WilliamBarbosa编译时出现此错误:
错误APT0000:在包“com.my.app”中未找到属性“riv\u corner\u radius”的资源标识符。
。我错过什么了吗?
public class ImageHelper
{
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap.CreateBitmap(bitmap.Width, bitmap.Height
, Android.Graphics.Bitmap.Config.Argb8888);
Canvas canvas = new Canvas(output);
Color color = Color.DodgerBlue;
Paint paint = new Paint();
Rect rect = new Rect(0, 0, bitmap.Width, bitmap.Height);
RectF rectF = new RectF(rect);
float roundPx = pixels;
paint.AntiAlias = true;
canvas.DrawARGB(0, 0, 0, 0);
paint.Color = color;
canvas.DrawRoundRect(rectF, roundPx, roundPx, paint);
paint.SetXfermode(new PorterDuffXfermode(Android.Graphics.PorterDuff.Mode.SrcIn));
canvas.DrawBitmap(bitmap, rect, rect, paint);
return output;
}
<refractored.controls.CircleImageView
android:id="@+id/ImageProfile"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="fitCenter"
android:src="@drawable/app_icon"
android:layout_gravity="center_horizontal"/>