web-dev-qa-db-ja.com

xamarinでカスタムビューを構築する方法

Xamarinでカスタムビューを設計できるチュートリアルはありますか?xamarinを使用してAndroidアプリのピンチズーム機能を構築したいですか?.

次のコードを試しましたが、機能しません。常に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*/
}
11
Cris

このJava Androidチュートリアルをチェックして、セットアップに必要なものを理解することをお勧めします。

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

カスタムビューの属性xmlファイルを作成する必要がある場合があります。

検討したいもう1つのアプローチは、ビューの代わりにフラグメントを使用することです。

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

1
Ben Bishop

レイアウトファイルでは、クラスへのパスを小文字で記述する必要があります。私にとって、Core.Droid.MyImageViewcore.droid.MyImageViewと書く必要がありました。

最初の文字だけを小さく書く必要があるのか​​、すべての文字を小さく書く必要があるのか​​はわかりませんが、lA_Application.ZoomViewまたはla_application.ZoomViewのいずれかを試すことができます。それらの1つはおそらく機能します:)

7
Jens

Xamarin.Androidでカスタムビューを作成する方法のスケルトンは次のとおりです

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

次に、Emmanuel Touzeryの回答を受け取り、それをスケルトンに追加します

Androidピンチズーム

2
honeyws