Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to construct custom views in xamarin

Is there any tutorial which will enable me to design custom views in xamarin?I want to build pinch zoom functionality for my android app using xamarin.

I have tried following code,but its not working,I am always getting android.view.InflateException: Binary XML file line #1: Error inflating class LA_Application.ZoomView error

using System;    
using System.Collections.Generic;
using System.Linq;    
using System.Text;    
using Android.App;    
using Android.Content;    
using Android.OS;    
using Android.Runtime;    
using Android.Util;    
using Android.Views;    
using Android.Widget;    
using Android.Graphics;

namespace LA_Application    
{

    public class ZoomView : FrameLayout      
    {

        private ScaleGestureDetector mScaleDetector;    
        private static float mScaleFactor = 1.0f;   


        public ZoomView (Context context) : base (context)
        {
            Initialize ();    
        }

        public ZoomView (Context context, IAttributeSet attrs) : base (context,attrs)    
        {
            Initialize ();    
        }

        public ZoomView (Context context, IAttributeSet attrs, int defStyle) : base (context, attrs, defStyle)
        {
            Initialize ();
        }

        void Initialize ()
        {
            mScaleDetector = new ScaleGestureDetector(Context, new ScaleListener());
        }

        public override bool OnTouchEvent (MotionEvent e)
        {
            mScaleDetector.OnTouchEvent(e);

            return true;
        }

        protected override void OnDraw(Android.Graphics.Canvas canvas)
        {
            base.OnDraw(canvas);

            canvas.Save();    
            canvas.Scale(mScaleFactor, mScaleFactor);
            canvas.Restore();
        }
    }

    private class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener
    {
        public override bool OnScale(ScaleGestureDetector detector)
        {
            mScaleFactor *= detector.ScaleFactor;

            // Don't let the object get too small or too large.
            mScaleFactor = Math.Max(0.1f, Math.Min(mScaleFactor, 5.0f));

            return true;
        }  
    }
}

}

and in layout file

<?xml version="1.0" encoding="utf-8"?>
<LA_Application.ZoomView xmlns:android="http://schemas.android.com/apk/res/android"
                         android:layout_width="match_parent"
                         android:layout_height="match_parent"
                         android:id="@+id/my_view" />

activity code

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    SetContentView(Resource.Layout.zoomview);

    /*some code*/
}
like image 948
Cris Avatar asked Jul 03 '13 10:07

Cris


People also ask

What are the views in Xamarin?

The visual elements in Xamarin. Forms fall into two separate categories: controls and arrangers. Both are considered visual elements, share a common base class (View), and are collectively known as Views.

What is custom renderer in Xamarin forms?

Custom renderers for a given type can be added to one application project to customize the control in one place while allowing the default behavior on other platforms; or different custom renderers can be added to each application project to create a different look and feel on iOS, Android, and the Universal Windows ...

How do you use bindable property in Xamarin forms?

A bindable property can be created by declaring a public static readonly property of type BindableProperty . The bindable property should be set to the returned value of one of the BindableProperty. Create method overloads.


1 Answers

In the layout file you need to write the path to your class in small letters. For me Core.Droid.MyImageView had to be written as core.droid.MyImageView.

I am not sure if only the first letter or all letter have to be written in small, but you can try either lA_Application.ZoomView or la_application.ZoomView. One of them will very likely work :)

like image 106
Jens Avatar answered Oct 03 '22 08:10

Jens