2013-07-03 10 views
9

Czy jest jakiś tutorial, który pozwoli mi zaprojektować własne widoki w Xamarin? Chcę zbudować zoom zoom funkcjonalność dla mojej aplikacji Android za pomocą xamarin.Jak skonstruować niestandardowe widoki w xamarin

Próbowałem następujący kod, ale jej nie działa, zawsze jestem coraz android.view.InflateException: Binary XML file line #1: Error inflating class LA_Application.ZoomView błąd

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

}

w pliku layoutu

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

kod aktywność

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

    SetContentView(Resource.Layout.zoomview); 

    /*some code*/ 
} 

Odpowiedz

1

Proponuję sprawdzanie samouczek Java Android, aby zorientować się, co jest potrzebne do instalacji:

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

może trzeba utworzyć atrybuty pliku xml dla widoku niestandardowego.

Innym rozwiązaniem może warto rozważyć jest użycie fragmentu zamiast widoku:

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

+1

nie ma pliku XML wygenerowanego w Xamarin, tylko plik C# - jakieś pomysły? –

4

W pliku układu trzeba napisać ścieżkę do swojej klasy w małych liter. Dla mnie Core.Droid.MyImageView trzeba było napisać jako core.droid.MyImageView.

Nie jestem pewien, czy tylko pierwsza litera lub cała litera musi być napisana małymi literami, ale możesz spróbować albo lA_Application.ZoomView lub . Jednym z nich będzie bardzo prawdopodobne praca :)

+0

To naprawiło mój problem. Używałem prawidłowego obszaru nazw w moim projekcie i działało, ale jeśli układ był w projekcie subbiblioteki, musiałem użyć małej przestrzeni nazw! –