android - 在 Xamarin.Forms 中创建 WebView 扩展以显示 gif。我无法在 Android 上加载图像

标签 android xamarin xamarin.forms xamarin.android gif

iOS 按预期工作。我也尝试将 .gif 添加到 Assets 文件夹(将 BaseUrl 设置为“file:///android_asset”),但没有成功。有什么想法吗?

imageHtml = "<center><body bgcolor =\""
                        + GetBackgroundColorHex()
                        + "\""
                        + heightAndWidth
                        + ">"
                        + (!string.IsNullOrWhiteSpace(imageFileName)
                            ? "<img src=\"" 
                            + imageFileName 
                            + "\""
                            + heightAndWidth
                            + "/>"
                            : "&nbsp;")
                        + "</body></center>";

            HtmlWebViewSource source = new HtmlWebViewSource()
            {
                Html = imageHtml
            };

            if (Device.RuntimePlatform == Device.Android && !string.IsNullOrWhiteSpace(imageFileName))
            {
                source.BaseUrl = "file:///android_res/drawable/";
            }

            Source = source;

这是我在输出中遇到的错误:

12-11 02:08:00.256 E/AndroidProtocolHandler(12895): Unable to open resource URL: file:///android_res/drawable/Loading.gif
12-11 02:08:00.256 E/AndroidProtocolHandler(12895): java.lang.NoSuchFieldException: Loading
12-11 02:08:00.256 E/AndroidProtocolHandler(12895):     at java.lang.Class.getField(Class.java:1549)
12-11 02:08:00.256 E/AndroidProtocolHandler(12895):     at org.chromium.android_webview.AndroidProtocolHandler.getFieldId(AndroidProtocolHandler.java:40)
12-11 02:08:00.256 E/AndroidProtocolHandler(12895):     at org.chromium.android_webview.AndroidProtocolHandler.openResource(AndroidProtocolHandler.java:54)
12-11 02:08:00.256 E/AndroidProtocolHandler(12895):     at org.chromium.android_webview.AndroidProtocolHandler.open(AndroidProtocolHandler.java:10)

最佳答案

您可以通过资源加载 Android.Webkit.WebView 内容,而不是可绘制内容。

以下是 Xamarin.Android 代码,用于解析图像以获取其宽度/高度,以确保保留宽高比并从 Asset 文件夹中显示它:

WebView Gif 查看器:

var src = "out.gif";
var backgroundColor = "#ff0000";
int imageWidth;
int imageHeight;
using (var stream = Assets.Open(src))
using (var options = new BitmapFactory.Options { InJustDecodeBounds = true })
{
    await BitmapFactory.DecodeStreamAsync(stream, null, options);
    imageWidth = options.OutWidth;
    imageHeight = options.OutHeight;
}
var html = $"<body bgcolor={backgroundColor};\"><img src=\"{src}\" alt=\"A Gif file\" width=\"{imageWidth}\" height=\"{imageHeight}\" style=\"width: 100%; height: auto;\"/></body>";
webView.Settings.AllowFileAccessFromFileURLs = true;
webView.LoadDataWithBaseURL("file:///android_asset/", html, "text/html", "UTF-8", "");

enter image description here

通过 Xamarin.Forms WebView:

var src = "image.gif";
var backgroundColor = "#ff0000";
int imageWidth = 300;
int imageHeight = 200;
var html = $"<body bgcolor={backgroundColor};\"><img src=\"{src}\" alt=\"A Gif file\" width=\"{imageWidth}\" height=\"{imageHeight}\" style=\"width: 100%; height: auto;\"/></body>";
webView.Source = new HtmlWebViewSource
{
    Html = html
};

注意:image.gif 位于 Android Assets (AndroidResource) 文件夹和 iOS Resource 文件夹 (BundleResource)

关于android - 在 Xamarin.Forms 中创建 WebView 扩展以显示 gif。我无法在 Android 上加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47748780/

相关文章:

java - Java中如何处理依赖关系

cordova - RhoMobile Suite vs. Titanium v​​s. Xamarin vs. PhoneGap vs. Telerik Platform vs. Codename One

c# - xamarin android 按钮点击不起作用

c# - 如何创建和初始化自定义 Xamarin Forms 控件

xamarin - 使用 xamarin 表单在 ListView 上添加左右完全滑动手势

android - 事件 setOnItemClickListener 在我的列表中不起作用

android - admob 广告加载失败 : 3

android - 如何从我的代码播放或恢复另一个音乐播放器的音乐

android - BiometricPrompt 类在 Xamarin Android 中不可用

c# - Xamarin.Forms 中编辑器的边框颜色