2015-08-19 18 views
5

Tôi đang làm việc trên ứng dụng Android Xamarin và tôi cần phải thực hiện Thông tư ImageView.Xem hình ảnh thông tư trên Xamarin

Làm cách nào để đạt được điều này?

+0

Bạn đã cố gắng làm gì cho đến nay? Chúng tôi không muốn lãng phí thời gian của bạn bằng cách đề xuất những điều bạn biết không phù hợp với bạn. –

Trả lời

6

Tôi sử dụng thư viện RoundedImageView. Nó được viết bằng Java, nhưng bạn có thể write a binding cho nó mà không có nhiều vấn đề. Một khi bạn làm, bạn chỉ có thể thêm video này vào .axml của bạn:

<RoundedImageView 
    local:riv_corner_radius="15dp" 
    local:riv_oval="false" 
    android:scaleType="centerCrop" 
    android:layout_width="30dp" 
    android:layout_height="30dp" /> 

Chỉnh sửa cho độc giả trong tương lai: Tôi đã viết một cổng của RoundedImageView cho Xamarin.Android, dựa trên các thư viện liên kết về bài đăng này. Mã nguồn có thể được tìm thấy here và gói NuGet here. A MvxRoundedImageView cũng được bao gồm để sử dụng với MvvmCross.

+0

nó không phải là một ý tưởng tốt để làm điều này khi bạn cần rất nhiều hình dạng tròn. một cách khác sẽ che giấu chế độ xem hình ảnh bình thường như được thực hiện với chế độ xem hình đại diện "tròn" trong hangouts và các địa điểm khác. – DooMMasteR

+0

Bạn có bất kỳ điểm chuẩn nào về điều này đang chạy trên các ứng dụng lớn và tự động thực hiện yêu cầu đó không? Tôi đã sử dụng nó trong RecyclerView khá lớn và tôi không gặp phải vấn đề gì về hiệu năng. Bên cạnh đó, OP không chỉ định số lượng hình dạng cần thiết, vì vậy tôi tin rằng điều này sẽ thực hiện công việc –

+0

Tôi gặp sự cố với thiết bị dualcore chậm hơn với danh sách xem (nhiều nghìn mục không quan trọng) và cuộn bộ chuyển đổi sql-cursor sẽ bắt đầu tụt hậu và phân tích thời gian dẫn đến kết luận rằng lớp phủ simpel nhanh hơn ... nhận xét của tôi chỉ nên điểm vào nút cổ chai đó, không phải bất kỳ vấn đề thực sự nào, vì giải pháp này ít nhất là sạch hơn nhiều – DooMMasteR

0
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) 
    { 

    } 
} 

Nguồn: https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Views/CircleDrawable.cs

0

Tham khảo những liên kết này:

How to create a circular ImageView in Android?

How to make an ImageView with rounded corners?

Đoạn mã trên làm việc cho android bản địa. Bạn cần phải chỉnh sửa mã để chuyển đổi thành cú pháp C# và áp dụng cho android xamarin. Để thuận tiện cho bạn, tôi đã thay đổi mã thành C#.

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; 
} 
1

Liên kết giới thiệu: https://github.com/jamesmontemagno/CircleImageView-Xamarin.Android/blob/master/CircleImageSample/Resources/layout/Main.axml?

<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"/> 

======================= ================================ Thêm tham chiếu của Refractored.controls.CircleImageView vào dự án của bạn từ gói nuget.

1

Thành phần Xamarin có sẵn cho giống nhau, bạn có thể kiểm tra nó here

Các vấn đề liên quan