Android 中ImageView加載超長圖片會報一個警告,并且無法在ImageView上渲染圖片。
OpenGLRenderer: Bitmap too large to be uploaded into a texture (440x13323, max=4096x4096)
據(jù)查葡公,開啟了硬件加速后揭朝,OpenGLRenderer能夠加載Bitmap的具有限制最大值捆等。
eg:當(dāng)前的最大限制是 4096x4096
這個限制的最大值可以根據(jù)方法獲得:
canvas.getMaximumBitmapHeight()和canvas.getMaximumBitmapWidth()
當(dāng)ImageView無法渲染這些圖片的時候,我們可以使用WebView來顯示這張圖片
我們需要借助一個庫 jsoup蜒车,一個Java 的HTML解析器
下面來說具體的實現(xiàn)。
1幔嗦、在assets下新建一個html文件酿愧,名為largeimg.xml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/vnd.wap.xhtml+xml;charset=utf-8"/>
</head>
<body>
</body>
</html>
2、利用jsoup中的Document類邀泉,進行html的解析嬉挡,獲取到html的字符串。
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(getAssets().open(
"largeimg.html"), "UTF-8"));
String mLine = reader.readLine();
while (mLine != null) {
mHtml += mLine;
mLine = reader.readLine();
}
Log.e("TAG", "mHtml >> " + mHtml);
doc = Jsoup.parse(mHtml);
} catch (IOException e) {
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// log the exception
}
}
}
3汇恤、設(shè)置webview庞钢,構(gòu)建html代碼
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(false);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
readNativeTemplateFile();//第二步驟中的代碼
Elements body = doc.select("body");
webView.addJavascriptInterface(new JsObject(), "injectObject");//第4步驟
body.html("<div><img width=\"100%\" height=\"auto\" src=\"" + imgUrl + "\" onclick='javascript:injectObject.close();' />"
+ "</div>");
webView.loadDataWithBaseURL(
"file:///android_asset/", doc.html(),
"text/html", "UTF-8", "");
4、addJavascriptInterface
class JsObject {
JsObject() {
}
public String toString() {
return "injectedObject";
}
@JavascriptInterface
public void close() {
finish();//finish掉當(dāng)前的activity
}
}
至此因谎,webview就可以顯示一張圖片了基括。
附:jsoup下載地址 https://jsoup.org/download
PS:可以通過關(guān)閉硬件加速的方法直接加載大圖片
在AndroidManifest.xml中設(shè)置<application>的屬性
android:hardwareAccelerated="false"
這樣也可以直接加載大圖