我需要在我的一个WebView上启用硬件加速。到目前为止,我发现如果我用11或13的目标API(分别是Android 3.0和3.2)构建我的项目,硬件加速就会启用,一切都很好。但奇怪的是,当我使用API 17或18构建我的项目时,由于某种原因,我开启所有打开硬件加速的努力都会被忽略。
到目前为止,我已经尝试过:
1)在清单
中的标签中设置android:hardwareAccelerated="true"
2)相同,但是对于包含WebView的活动
3)我的Activity的onCreate中的以下代码(在设置内容视图之前):
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
4)相同,但使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
在所有情况下,webView.isHardwareAccelerated()
都会返回false,即使它正在工作。
请帮忙,因为这个而被卡在API 13上会非常蹩脚......
答案 0 :(得分:4)
在API 18上测试:
通过将Runnable
发布到WebView
:
WebView webView = (WebView) findViewById(R.id.webview_id);
// Shows: "Is hardware accelerated? false"
// Toast.makeText(YourActivity.this, "Is hardware accelerated? " +
// webView.isHardwareAccelerated(),
// Toast.LENGTH_LONG).show();
webView.post(new Runnable() {
@Override
public void run() {
Shows: "Is hardware accelerated? true"
Toast.makeText(YourActivity.this, "Is hardware accelerated? " +
webView.isHardwareAccelerated(),
Toast.LENGTH_LONG).show();
if (webView.isHardwareAccelerated()) {
// isAccelerated();
} else {
// isNotAccelerated();
}
}
});
从硬件加速的资源页面:
如果您的目标API级别,默认情况下会启用硬件加速 是> = 14,但也可以明确启用。
如果您正在显示的图像仍然是像素化的,请尝试设置:
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
并查看图像的像素化是否会变好。
考虑阅读Hardware Acceleration上的资源页面。