2015-08-19 14 views
5

पर सर्कुलर छवि दृश्य I Xamarin एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं, और मुझे परिपत्र ImageView बनाने की आवश्यकता है।Xamarin

यह कैसे प्राप्त किया जा सकता है?

+0

क्या आप अब तक ऐसा करने के लिए कोशिश की है की जाँच कर सकते हैं? हम उन चीज़ों का सुझाव देकर अपना समय बर्बाद नहीं करना चाहते हैं जो आप जानते हैं कि आपके लिए काम नहीं करते हैं। –

उत्तर

6

मैं RoundedImageView लाइब्रेरी का उपयोग करता हूं। यह जावा में लिखा गया है, लेकिन आप बिना किसी समस्या के write a binding कर सकते हैं। भविष्य पाठकों के लिए

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

संपादित करें:: एक बार जब आप करते हैं, तो आप बस यह आपके .axml को जोड़ सकते हैं मैं पुस्तकालय इस पोस्ट पर जुड़ा हुआ के आधार पर Xamarin.Android के लिए RoundedImageView के एक बंदरगाह में लिखा था,। स्रोत कोड here और NuGet पैकेज here पाया जा सकता है। MvvmCross के साथ उपयोग के लिए MvxRoundedImageView भी शामिल है।

+0

जब आपको बहुत सारे गोल आकार की आवश्यकता होती है तो ऐसा करने का अच्छा विचार नहीं है। एक और तरीका एक सामान्य छवि दृश्य को मुखौटा कर देगा जैसे यह hangouts और अन्य स्थानों में googles "round" अवतार दृश्यों के साथ किया जाता है। – DooMMasteR

+0

क्या आपके पास बड़े अनुप्रयोगों पर चलने और इस तरह के दावे को भरने के लिए कोई बेंचमार्क है? मैंने इसे काफी बड़े रीसाइक्लिंग व्यू के अंदर उपयोग किया और मुझे कोई प्रदर्शन समस्या नहीं मिली। इसके अलावा, ओपी ने आवश्यक आकारों की मात्रा निर्दिष्ट नहीं की है, इसलिए मेरा मानना ​​है कि यह काम करेगा –

+0

मुझे सूची दृश्यों के साथ धीमे ड्यूलकोर उपकरणों पर समस्याएं थीं (कई हज़ार प्रविष्टियां जो वास्तव में कोई फर्क नहीं पड़ती) और एक एसक्यूएल-कर्सर एडाप्टर स्क्रॉलिंग अंतराल और समय विश्लेषण से निष्कर्ष निकालना शुरू हो जाएगा कि सिंपल ओवरलेइंग तेजी से था ... मेरी टिप्पणी केवल उस संभावित बाधा को इंगित करनी चाहिए, वास्तविक समस्या नहीं, क्योंकि यह समाधान कम से कम एक क्लीनर आकार को ओवरले करने से बेहतर पठनीय है – 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) 
    { 

    } 
} 

स्रोत: https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Views/CircleDrawable.cs

0

इन कड़ियों देखें:

How to create a circular ImageView in Android?

How to make an ImageView with rounded corners?

ऊपर कोड देशी Android के लिए काम करता है। आपको C# वाक्यविन्यास में कनवर्ट करने और xamarin एंड्रॉइड के लिए अपनाने के लिए कोड को ट्विक करने की आवश्यकता है। आपकी सुविधा के लिए मैंने कोड को सी # में बदल दिया है।

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

लिंक देखें: 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"/> 

=========================================== ================================ अस्वीकृति पैकेज से अपने प्रोजेक्ट में Refractored.controls.CircleImageView का संदर्भ जोड़ें।

1

Xamarin घटक उसी के लिए उपलब्ध है, तो आप इसे here