Android,如何在将.gif加载到Webview

时间:2016-09-02 21:08:11

标签: android html css webview animated-gif

我在这里阅读了很多主题,但显然所提供的解决方案都没有按照我的意料100%正常工作。我只想加载动画图像( .gif 文件)。这就是我所拥有的:

template.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml";
xml:lang="en" lang="en">
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,target-densityDpi=device-dpi" />
     <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
[CONTENT]
</body>
</html>

的style.css

html, div, body, img {
margin: 0;
padding: 0;
}

main.xml(如何定义webview)

    <WebView
        android:id="@+id/webView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="gone"/>

在视图创建期间 - java代码

webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

我有两个几乎非常适合我的解决方案,所以首先只使用 WebView.LoadUrl(filePath),在这种情况下切换图片后我得到额外的空白 下面图片,当我重复图像加载过程几次时,它最终将摆脱白色空间。这是第一个解决方案:

加载方法 //我知道加载空白页面和清除视图的结果大致相同,但无论如何我都在尝试所有内容......

webView.loadUrl("about:blank");
webView.clearView();
webView.clearCache(true);

webView.loadUrl("file:///android_res/raw/" + currentPicName +".gif");

第二个解决方案有点不同,因为它使用了带有viewport和style.css的template.html,所以基本上我正在做的是将它们与 WebView.loadDataWithBaseUrl(...)一起使用,但是这种情况我得到的底部额外空白(几乎没有,看起来像填充/边距),但如果是狭窄的图像我在右侧获得额外的白色空间...当我在不同大小的图像之间切换我通常会在底部获得额外的空白区域,然后重复加载过程,即使通常也会解决它。

webView.loadUrl("about:blank");
webView.clearView();
webView.clearCache(true);

try
{
    InputStream is = getResources().getAssets().open("template.html");
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();

    String content = "<img src='"+currentPicName+".gif'/>";
    webView.loadDataWithBaseURL("file:///android_res/raw/",
        new String(buffer).replace("[CONTENT]", content),
        "text/html", "UTF-8", null);
} catch (IOException e)
{
    e.printStackTrace();
}

另外值得一提的是,每当新图片加载时,我经常会在1毫秒内看到它下面有旧图片闪烁,所以可能旧视图没有正确清除,有些尺寸被缓存,如白色仅在从较大图像更改为较小图像时添加空间。因此,解决方案可能是以某种方式将所有.gif文件调整为一个常见大小,同时保留其动画,但不知道如何实现这一点。

提前感谢您的任何答案/提示,如果您需要更多有关情况的详细信息,请随时提出!出于测试目的,我使用的是带有android 4.1.2的手机,目标api是16我相信。

0 个答案:

没有答案