2012-11-10 17 views
1

我想擴展ShadowBuilder以便在拖動時更改畫布大小。但是,由於下面的編譯錯誤,我無法編譯它。擴展shadowbuilder在Monodroid中有編譯錯誤

下面的代碼到我的ShadowBuilder

public class TileShadow : View.DragShadowBuilder 
{ 
    //private Drawable mShadow; 

    public TileShadow() 
    { 
    } 

    public TileShadow(View view) 
     : base(view) 
    { 
    } 

    protected TileShadow(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) 
    { 
    } 

    public override void OnDrawShadow(Canvas canvas) 
    { 
     canvas.Scale(1.8f, 1.8f); 
     base.OnDrawShadow(canvas); 
     //mShadow.Draw(canvas); 
     //View.Draw(canvas); 
    } 
} 

錯誤25找不到符號 符號:類DragShadowBuilder 位置:類android.view.View 擴展android.view.View.DragShadowBuilder

enter image description here

回答

0

你定位了什麼API級別? DragShadowBuilder可在11級起。

我在Mono上測試了您的代碼,針對API Level 12(安裝了最低級別的Android 3.1)的Android 4.2.6,它編譯時沒有問題並且部署到模擬器。

您是否嘗試過清潔/重建解決方案?

您是否嘗試過從頭開始創建一個新項目並實施此類來查看問題是否與您現有的解決方案分離?

此外,請檢查您的ACW在obj \ debug \ android \ src \ wordshuffle \ android \ shadowbuilders \文件夾中的樣子。

礦看起來像這樣

package androidapplication1; 


public class TileShadow 
    extends android.view.View.DragShadowBuilder 
    implements 
     mono.android.IGCUserPeer 
    { 
    static final String __md_methods; 
    static { 
     __md_methods = 
      "n_onDrawShadow:(Landroid/graphics/Canvas;)V:GetOnDrawShadow_Landroid_graphics_Canvas_Handler\n" + 
      ""; 
     mono.android.Runtime.register ("AndroidApplication1.TileShadow, AndroidApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", TileShadow.class, __md_methods); 
    } 


    public TileShadow (android.view.View p0) 
    { 
     super (p0); 
     if (getClass() == TileShadow.class) 
      mono.android.TypeManager.Activate ("AndroidApplication1.TileShadow, AndroidApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Android.Views.View, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=c4c4237547e4b6cd", this, new java.lang.Object[] { p0 }); 
    } 


    public TileShadow() 
    { 
     super(); 
     if (getClass() == TileShadow.class) 
      mono.android.TypeManager.Activate ("AndroidApplication1.TileShadow, AndroidApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "", this, new java.lang.Object[] { }); 
    } 


    public void onDrawShadow (android.graphics.Canvas p0) 
    { 
     n_onDrawShadow (p0); 
    } 

    private native void n_onDrawShadow (android.graphics.Canvas p0); 

    java.util.ArrayList refList; 
    public void monodroidAddReference (java.lang.Object obj) 
    { 
     if (refList == null) 
      refList = new java.util.ArrayList(); 
     refList.add (obj); 
    } 

    public void monodroidClearReferences() 
    { 
     if (refList != null) 
      refList.clear(); 
    } 
} 
+0

喜alexw,謝謝。它現在工作。我的目標是API 8,並沒有編譯。現在更改爲API 12。這是否意味着我將無法支持使用API​​ 8的移動設備? –

+0

是的,這是正確的。如果您希望定位先前的設備,則必須在運行時檢查版本,並且只有在版本爲API級別11或更高版本時才使用此類。請參閱此問題以瞭解有關如何執行此操作的更多信息。 http://stackoverflow.com/questions/12272397/android-backward-compatibility-but-still-utilise-latest-api-features –

+0

此外,如果你相信我已經回答你的問題,請將其標記爲已接受。謝謝 –