2013-07-03 10 views
9

Esiste un tutorial che mi consenta di progettare visualizzazioni personalizzate in xamarin? Voglio creare funzionalità di zoom con pinch per la mia app Android utilizzando xamarin.Come costruire visualizzazioni personalizzate in xamarin

ho cercato seguente codice, ma la sua non lavorando, sto ottenendo sempre android.view.InflateException: Binary XML file line #1: Error inflating class LA_Application.ZoomView errore

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

}

e nel file di layout

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

codice attività

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

    SetContentView(Resource.Layout.zoomview); 

    /*some code*/ 
} 

risposta

1

Vorrei suggerire check-out questo tutorial Java Android per avere un'idea di ciò che è necessario per l'installazione:

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

potrebbe essere necessario creare un attributi di file XML per la visualizzazione personalizzata.

Un altro approccio che si può prendere in considerazione è quello di utilizzare un frammento, invece di una visione:

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

+1

non esiste un file xml generato in Xamarin, solo file C# - qualche idea? –

4

Nel file di layout è necessario scrivere il percorso di classe in lettere minuscole. Per me Core.Droid.MyImageView doveva essere scritto come core.droid.MyImageView.

Non sono sicuro che solo la prima lettera o tutte le lettere debbano essere scritte in piccolo, ma è possibile provare sia lA_Application.ZoomView o . Uno di loro sarà molto probabilmente il lavoro :)

+0

Risolto il problema. Stavo usando lo spazio dei nomi corretto nel mio progetto e funzionava, ma se il layout era in un progetto di libreria secondaria, allora avevo bisogno di usare la versione minuscola dello spazio dei nomi! –

Problemi correlati