2

webview を使用して 9 つのタイルで構成されるアプリケーションを構築したいと考えています。それらのそれぞれは、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!");
  }
}

次に、別の質問で見つかったこのコードによってアニメーションが処理されます。

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 が表示されなくなり、白い画面に置き換えられますが、スムーズなトランジション効果を得たいと考えています。誰でも私を助けることができますか?または、別の解決策を提案しますか?どんな助けでも本当に感謝します!

4

1 に答える 1

0

私はwebviewsで同様の問題を抱えており、この問題の解決策は私の問題を解決します。すぐに、アクティビティのハードウェア アクセラレーションを無効にしました。お役に立てれば。

于 2013-04-25T12:14:26.173 に答える