Как создать пользовательские представления в Xamarin

есть ли учебник, который позволит мне создавать пользовательские представления в xamarin?Я хочу создать функциональность pinch zoom для своего приложения android с помощью xamarin.

Я пробовал следующий код,но он не работает,я всегда получаю android.view.InflateException: Binary XML file line #1: Error inflating class LA_Application.ZoomView

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

}

и в файл шаблона

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

действие кода

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

    SetContentView(Resource.Layout.zoomview);

    /*some code*/
}

3 ответов


Я бы предложил проверить этот учебник Java Android, чтобы получить представление о том, что вам нужно настроить:

http://developer.android.com/training/custom-views/index.html

возможно, потребуется создать XML-файл атрибутов для пользовательского представления.

другой подход, который вы можете рассмотреть, - использовать фрагмент вместо вид:

http://docs.xamarin.com/guides/android/platform_features/fragments/fragments_walkthrough


в файле макета вам нужно написать путь к вашему классу мелкими буквами. Для меня Core.Droid.MyImageView должно было быть написано как core.droid.MyImageView.

Я не уверен, что только первая буква или вся буква должны быть написаны маленькими, но вы можете попробовать либо lA_Application.ZoomView или la_application.ZoomView. Один из них, скорее всего, будет работать:)


вот скелет того, как создать пользовательское представление в xamarin.android

http://xandroid4net.blogspot.com/2014/09/custom-view.html

принять Эммануэль Touzery ответ и добавить его к скелету

android pinch zoom