9块牌Android WebView

时间:2013-01-28 10:55:08

标签: android android-webview

我想使用webview构建一个由9个tile组成的应用程序。它们中的每一个都是我加载到webview中的.html文件,通过滑动进行导航。

这是用于滑动的代码:

boolean result = false;
  try {
    float diffY = e2.getY() - e1.getY();
    float diffX = e2.getX() - e1.getX();

    if (Math.abs(diffX) > Math.abs(diffY)) {
      if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
        if (diffX > 0)
          onSwipeRight();
        else
          onSwipeLeft();
      }
    } else {
      if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
        if (diffY > 0)
          onSwipeBottom();
        else
          onSwipeTop();
      }
    }
  } catch (Exception exception) {
    exception.printStackTrace();
  }
  return result;
}

其中每个onSwipe<Direction>()方法的结构如下:

private void onSwipeTop() {
  if (row < MAX_ROW) {
    row++;
    loadUrl(Direction.UP);
    System.out.println("Swipe Top!");
  }
}

然后动画由另一个question中的代码处理:

public void onPageFinished(WebView view, String url) {
    webView.setDrawingCacheEnabled(true);
    webView.buildDrawingCache();
    imageView.setImageBitmap(Bitmap.createBitmap(webView.getDrawingCache()));
    webView.setDrawingCacheEnabled(false);

    imageView.setVisibility(View.VISIBLE);
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

    ObjectAnimator webViewAnimator = null;
    ObjectAnimator imageViewAnimator = null;

    switch (currentDirection) {
      case LEFT:
        System.out.println(">> Left!");
        webViewAnimator =
            ObjectAnimator.ofFloat(webView, "translationX", webView.getWidth(), 0);
        imageViewAnimator =
            ObjectAnimator.ofFloat(imageView, "translationX", 0, -webView.getWidth());
        break;
      case RIGHT:
        System.out.println(">> Right!");
        webViewAnimator =
            ObjectAnimator.ofFloat(webView, "translationX", -webView.getWidth(), 0);
        imageViewAnimator =
            ObjectAnimator.ofFloat(imageView, "translationX", 0, webView.getWidth());
        break;
      case UP:
        System.out.println(">> Up!");
        webViewAnimator =
            ObjectAnimator.ofFloat(webView, "translationY", webView.getHeight(), 0);
        imageViewAnimator =
            ObjectAnimator.ofFloat(imageView, "translationY", -webView.getHeight());
        break;
      case BOTTOM:
        System.out.println(">> Bottom!");
        webViewAnimator =
            ObjectAnimator.ofFloat(webView, "translationY", -webView.getHeight(), 0);
        imageViewAnimator =
            ObjectAnimator.ofFloat(imageView, "translationY", webView.getHeight());
        break;
      default:
        break;
    }

    imageViewAnimator.setDuration(SLIDE_DURATION);
    webViewAnimator.setDuration(SLIDE_DURATION);

    AnimatorSet set = new AnimatorSet();
    set.addListener(new AnimatorListenerAdapter() {
      public void onAnimationEnd(Animator animation) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        imageView.setVisibility(View.GONE);
      }
    });

    set.playTogether(imageViewAnimator, webViewAnimator);
    set.start();

我的问题:一旦我改变了滑动方向,ImageView就不再出现了,并且被白色屏幕取代,而我想获得平滑的过渡效果。有谁能够帮我?或者建议另一个解决方案?任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

我有类似的问题与webviews和this问题解决方案解决了我的问题。不久,我禁用了我的活动的硬件加速。希望这会有所帮助。