Xamarin Forms Увеличить Уменьшить в веб-представлении Не работает плавно - PullRequest
0 голосов
/ 04 июня 2019

Я Пользовательский Рендеринг Webview В этом я загружаю Pdf.Когда этот PDF пытается увеличить или уменьшить масштаб.Я ясно вижу, что не хватает.Фрист, я думал, что это проблема с Android, тогда я загружаю pdf и пробую. Все хорошо, все работает гладко.

Вот мой код

В общем проекте

  public class CustomWebView : WebView
{
    public static readonly BindableProperty UriProperty = BindableProperty.Create(nameof(Uri),typeof(string),typeof(CustomWebView),default(string));

    public string Uri
    {
        get => (string)GetValue(UriProperty);
        set => SetValue(UriProperty, value);
    }       
}

Вanrioid Custom Render Вот так

  public class CustomWebViewRenderer : WebViewRenderer
{
    public CustomWebViewRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {              
            Control.Settings.AllowUniversalAccessFromFileURLs = true;                   
            Control.Settings.BuiltInZoomControls = true;
            Control.Settings.DisplayZoomControls = true;

        }
        this.Control.SetBackgroundColor(Android.Graphics.Color.Transparent);
    }
    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName != "Uri") return;
        var customWebView = Element as CustomWebView;
        if (customWebView != null)
        {
            Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", string.Format("file:///android_asset/Content/{0}", WebUtility.UrlEncode(customWebView.Uri))));        
        }
    }

}

Получает PDF, а также показывает без проблем, но при увеличении или уменьшении ясно видна блокировка Как решить эту проблему.

Увеличениефункция входа / выхода в Webview не гладкая

1 Ответ

1 голос
/ 05 июня 2019

вы можете сделать пользовательский рендерер или использовать плагин Xam.Plugin.WebView для javascriptjection. Ниже приведен код, показывающий пример использования плагина.Вы можете вызвать действие, чтобы увеличить или уменьшить масштаб.

        var zoomFactor = 0.1;
        var zoomCounter = 1;
        Func<Task> zoomInAction = async () =>
        {
            zoomFactor = zoomFactor + 0.1;
            if (webView != null)
                await webView.InjectJavascriptAsync($"document.body.style.zoom = {zoomCounter + 1 * zoomFactor};");
        };

        Func<Task> zoomOutAction = async () =>
        {
            zoomFactor = zoomFactor - 0.1;
            if (webView != null)
                await webView.InjectJavascriptAsync($"document.body.style.zoom = {zoomCounter + 1 * zoomFactor};");
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...