我有custom view
我在Android
上捕获用户的签名。 view
工作正常,我得到了我想要的结果。现在我需要添加水印(签名框背景的四个角上的小文本)。我在Android和iOS上这样做,所以我在iOS上做的是创建label
,并使用一些配置我在运行时计算frame (x,y,width,heigh)
并将它们添加到自定义视图。这适用于iOS(MonoTouch)。现在我需要在MonoForAndroid上做同样的事情。
到目前为止,我已经得到了这个:
// 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 :(得分:0)
这里的问题可能是,它显示了onDraw
中已添加的相对布局。因此,在此方法之后或之内,在rootview
中添加相对布局
EnsureAddingWatermarkControl(View view)
您在代码中提供了以下评论。
//首先,我创建一个RelativeLayout并将其添加到我的customView中 拿着标签
首先,您应该将label
添加到相对布局中,然后将相对布局添加到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();
}
}
答案 1 :(得分:0)
我通过传递包含RelativeLayout
的{{1}}的引用并使用它来保存新(动态)创建的标签(SignatureView
)和水印来解决它。这很有效。在每TextView
之前,我会relativeLayout.Add(view)
确保我没有relativeLayout.Remove(view)
两次add
布局(可能会抛出view
)。我将很快写一篇关于此的博客文章,并在此更新我的答案,以包括