2013-07-03 78 views
9

是否有任何教程能讓我在xamarin中設計自定義視圖?我想使用xamarin爲我的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*/ 
} 

回答

4

在你需要寫的路徑,你的類以小寫的佈局文件。 對我來說Core.Droid.MyImageView必須寫成core.droid.MyImageView

我不確定是否只有第一個字母或所有字母都必須小寫,但您可以嘗試lA_Application.ZoomView或。其中一人很可能會工作:)

+0

這解決了我的問題。我在我的項目中使用了正確的名稱空間,並且它正在工作,但是如果佈局位於子庫項目中,那麼我需要使用命名空間的小寫版本! –