Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Xamarin混合Web视图打开签名板_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

从Xamarin混合Web视图打开签名板

从Xamarin混合Web视图打开签名板,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我使用JSBridge在混合Web视图和c#Action之间创建了一座桥梁,效果很好 我试图根据参数调用signature pad视图,并希望在HTML页面内的image元素中加载签名 public class JSBridge: Java.Lang.Object { readonly WeakReference < HybridWebViewRenderer > hybridWebViewRenderer; WebView _webView; public JS

我使用JSBridge在混合Web视图和c#Action之间创建了一座桥梁,效果很好

我试图根据参数调用signature pad视图,并希望在HTML页面内的image元素中加载签名

public class JSBridge: Java.Lang.Object {
   readonly WeakReference < HybridWebViewRenderer > hybridWebViewRenderer;
   WebView _webView;

   public JSBridge(HybridWebViewRenderer hybridRenderer, WebView webView) {
    hybridWebViewRenderer = new WeakReference < HybridWebViewRenderer > (hybridRenderer);

    _webView = webView;
   }

   [JavascriptInterface]
   [Export("invokeAction")]
   public async void InvokeAction(string data) {

     if (data == "OpenSignaturePad") {

      var signatureView = new SignaturePadView() {
       StrokeWidth = 3 f,
        StrokeColor = Color.White,
        BackgroundColor = Color.Black
      };

      var bitmap = signatureView.GetImageStreamAsync(SignatureImageFormat.Png);

      var url = ImageToBase64(bitmap);

      Xamarin.Forms.Device.BeginInvokeOnMainThread(async () => {
       _webView.EvaluateJavascript("document.getElementById('imgTest').src='" + url + "'", null);

      });
     }
公共类JSBridge:Java.Lang.Object{
只读WeakReferenceHybridWebViewRenderer;
网络视图(WebView),;
公共JSBridge(HybridWebViewRenderer hybridRenderer,WebView WebView){
hybridWebViewRenderer=新的WeakReference(hybridRenderer);
_网络视图=网络视图;
}
[JavascriptInterface]
[导出(“调用”)]
公共异步void InvokeAction(字符串数据){
如果(数据==“OpenSignaturePad”){
var signatureView=新SignaturePadView(){
冲程宽度=3 f,
StrokeColor=颜色。白色,
背景颜色=颜色。黑色
};
var bitmap=signatureView.GetImageStreamAsync(SignatureImageFormat.Png);
var url=ImageToBase64(位图);
Xamarin.Forms.Device.BeginInvokeMainThread(异步()=>{
_EvaluateJavascript(“document.getElementById('imgTest').src=”+url+”,null);
});
}

我不知道如何在当前视图上调用
signatureView
。有什么想法吗?

根据您的描述,如果要从hybridwebview获取本地签名板视图,可以创建一个C类,其中包含从JavaScript调用的方法

class MyJSInterface : Java.Lang.Object
{
Context context;

public MyJSInterface (Context context)
{
    this.context = context;
}

public void ShowToast ()
{
    Toast.MakeText(context, "url from signature pad", ToastLength.Short).Show();
}
}

然后调用JS:

<button type="button" onClick="CSharp.ShowToast ('Call C#')">Call C#</button>
呼叫C#
您可以查看以下文章: