2014-02-19 107 views
0

我有一個custom view,我用它來捕獲Android上的用戶簽名。 view工作正常,我得到我想要的結果。現在我需要添加水印(簽名框的背景四角上的小文本)。我在Android和iOS上這樣做,所以我在iOS上做的是創建label,並使用一些配置我在運行時計算frame (x,y,width,heigh)並將它們添加到自定義視圖。這適用於iOS(MonoTouch)。現在我需要在MonoForAndroid上做同樣的事情。將標籤和圖像動態添加到Android中的自定義視圖中

到目前爲止,我得到這個:

 
// my customView 
public signatureView : View, ISignatureView 
{ 
    // some irrelvant code here 

    // then OnDraw (which is where I draw the signature line) 
    protected override void OnDraw(Canvas canvas) 
    { 
     DrawWaterMarks(); 
    } 

    private void DrawWaterMarks() 
    { 
     // First, I create a RelativeLayout and add it to my customView to hold the labels 
     _relativeLayout = new RelativeLayout(this.Context); 
     var layoutParam = new RelativeLayout.LayoutParams(this.MeasuredWidth, this.MeasuredHeight); 
     _relativeLayout.LayoutParameters = layoutParam; 
     var viewGroup = (ViewGroup)this.RootView; 
     viewGroup.AddView(_relativeLayout); 

     // I then create the labels 
     ILabel label = new Label(Context); 
     label.Layout(watermark.x, watermark.y, 0,0); 
     EnsureAddingWatermarkControl(label); 

    } 

    private void EnsureAddingWatermarkControl(View view) 
    { 
     if (_relativeLayout != null && view != null) 
     { 
      _relativeLayout.RemoveView(view); 
      _relativeLayout.AddView(view, view.MeasuredWidth, view.MeasuredHeight); 
      this.Invalidate(); 
     }   
    } 

} 

現在上面所有的代碼工作正常,沒有異常或錯誤,但我看不到我的任何標籤。

我假設它是RelativeLayout以及尺寸的設置和我正在做的方式,但無法解決問題出在哪裏。

任何幫助將不勝感激。

回答

0

我解決了這個問題,通過傳遞我的RelativeLayout的引用來保存SignatureView並使用它保存新(動態)創建的標籤(TextView)和水印。這很好。在每個relativeLayout.Add(view)之前,我做了relativeLayout.Remove(view)以確保我沒有add相同的view兩倍於佈局(這可能會拋出exception)。我很快就會寫一篇關於此的博客文章,並將在此更新我的答案,以包含該內容

0

這裏的問題可能是,它顯示已添加到onDraw中的相對佈局。因此,在rootview之後或者這種方法

EnsureAddingWatermarkControl(View view) 

你給下面的代碼中的註釋裏添加您的相對佈局。

//首先,我創建了一個RelativeLayout的,並將其添加到我的customView到 持有

首先,你應該添加label s到您的相對佈局的標籤,那麼你應該添加您的相對佈局您customView(如由您提供的代碼段中提到)

使你的代碼應該像

private void DrawWaterMarks() 
{ 
     ILabel label = new Label(Context); 
     label.Layout(watermark.x, watermark.y, 0,0); 
     EnsureAddingWatermarkControl(label); 

} 
private void EnsureAddingWatermarkControl(View view) 
{ 
     if (view != null) 
     { 
      _relativeLayout = new RelativeLayout(this.Context); 
     var layoutParam = new RelativeLayout.LayoutParams(this.MeasuredWidth, this.MeasuredHeight); 
     _relativeLayout.LayoutParameters = layoutParam; 
        _relativeLayout.AddView(view, view.MeasuredWidth, view.MeasuredHeight); 

     var viewGroup = (ViewGroup)this.RootView; 
     viewGroup.AddView(_relativeLayout); 


      this.Invalidate(); 
     }   
} 
+0

是否需要再次添加它?我以爲我需要添加一次..我會給這個嘗試 –

+0

Ur改變相對佈局不反映bcoz,你的rootview不知道它的修改。 – Priya

+0

var viewGroup =(ViewGroup)this.RootView; 你能解釋一下你爲什麼使用這條線嗎? – Priya

相關問題