我在某处读到硬件加速应该适用于所有内置的 Android 视图;但是,当我尝试使用 WebView 制作幻灯片动画时,整个 Web 内容在动画期间变为空白。
我会写一个小应用程序,所以如果你想亲自看看,你可以试试。每次在 WebView 中加载页面时,应用程序都会执行幻灯片动画。我们将在 ImageView 和 WebView 之间滑动。ImageView 将只包含 WebView 本身的屏幕截图。为您的活动在 onCreate 中粘贴以下代码:
final WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.google.com");
final ImageView myImageView = (ImageView) findViewById(R.id.imageView);
myWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
myWebView.setDrawingCacheEnabled(true);
myWebView.buildDrawingCache();
myImageView.setImageBitmap(Bitmap.createBitmap(myWebView.getDrawingCache()));
myWebView.setDrawingCacheEnabled(false);
myImageView.setVisibility(View.VISIBLE);
myWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator webViewAnimator = ObjectAnimator.ofFloat(myWebView, "translationX", myWebView.getWidth(), 0);
webViewAnimator.setDuration(SLIDE_DURATION);
ObjectAnimator imageViewAnimator = ObjectAnimator.ofFloat(myImageView, "translationX", 0, -myWebView.getWidth());
imageViewAnimator.setDuration(SLIDE_DURATION);
AnimatorSet set = new AnimatorSet();
set.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
myWebView.setLayerType(View.LAYER_TYPE_NONE, null);
myImageView.setVisibility(View.GONE);
}
});
set.playTogether(webViewAnimator, imageViewAnimator);
set.start();
}
}
确保您的 Manifest.xml 中有 android:hardwareAccelerated="true"
此外,在您的 main_layout.xml 中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/imageView"
android:contentDescription="@string/image_view_description"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</RelativeLayout>
现在每次加载页面时,都会在 ImageView(包含 WebView 的屏幕截图)和 WebView 本身之间进行幻灯片转换。
该错误在 JellyBean 模拟器中不可重现,但它确实发生在迄今为止测试的所有 ICS/JellyBean 设备上......
对此问题的任何见解将不胜感激。请注意,虽然我可以通过将其图层类型设置为 LAYER_TYPE_SOFTWARE 来简单地禁用 WebView 上的硬件加速,这将解决“消隐”问题,但由于渲染优势,我想保持启用硬件加速。