Example usage for android.support.v4.view ViewPropertyAnimatorListenerAdapter ViewPropertyAnimatorListenerAdapter

List of usage examples for android.support.v4.view ViewPropertyAnimatorListenerAdapter ViewPropertyAnimatorListenerAdapter

Introduction

In this page you can find the example usage for android.support.v4.view ViewPropertyAnimatorListenerAdapter ViewPropertyAnimatorListenerAdapter.

Prototype

ViewPropertyAnimatorListenerAdapter

Source Link

Usage

From source file:moe.yukinoneko.gcomic.module.details.ComicDetailsActivity.java

@Override
public void updateComicDetailsContent(ComicData comicData) {
    firstLetter = comicData.firstLetter;

    comicDetailsDescription.setText(comicData.description);
    mDescriptionDialog.setMessage(comicData.description);

    List<String> authors = new ArrayList<>();
    for (ComicData.AuthorsBean author : comicData.authors) {
        authors.add(author.tagName);/*ww  w .  j a  v  a 2  s.  c o  m*/
    }
    authorTagGroup.setTags(authors);

    List<String> types = new ArrayList<>();
    for (ComicData.TypesBean type : comicData.types) {
        types.add(type.tagName);
    }
    typeTagGroup.setTags(types);

    mAdapter.setDownloadedChapters(comicData.downloadedChapters);
    mAdapter.setReadHistory(comicData.readHistory);

    final List<ComicData.ChaptersBean.ChapterBean> chapters = comicData.chapters.get(0).data;

    ViewCompat.animate(loadingProgressBar).alpha(0.0f).setListener(new ViewPropertyAnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(View view) {
            super.onAnimationEnd(view);

            loadingProgressBar.setVisibility(View.INVISIBLE);

            comicDetailsContent.setVisibility(View.VISIBLE);
            mAdapter.replaceAll(chapters);

            mBottomSheetDialogView = new DownloadBottomSheetDialogView(ComicDetailsActivity.this,
                    ComicDetailsActivity.this.comicId, ComicDetailsActivity.this.comicTitle,
                    ComicDetailsActivity.this.comicCover, ComicDetailsActivity.this.firstLetter,
                    mAdapter.getData());
            mBottomSheetDialogView.setOnBottomSheetDismissListener(ComicDetailsActivity.this);
        }
    }).start();
}

From source file:com.google.samples.apps.topeka.view.quiz.QuizActivity.java

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void revealFragmentContainerLollipop(final View clickedView, final FrameLayout fragmentContainer,
        int themeAccentColor) {
    prepareCircularReveal(clickedView, fragmentContainer, themeAccentColor);

    ViewCompat.animate(clickedView).scaleX(0).scaleY(0).alpha(0).setInterpolator(mInterpolator)
            .setListener(new ViewPropertyAnimatorListenerAdapter() {
                @Override/*from  w w  w.ja v  a  2s.  com*/
                public void onAnimationEnd(View view) {
                    fragmentContainer.setVisibility(View.VISIBLE);
                    clickedView.setVisibility(View.GONE);
                }
            }).start();

    fragmentContainer.setVisibility(View.VISIBLE);
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.play(mCircularReveal).with(mColorChange);
    animatorSet.start();
}

From source file:com.freshdigitable.udonroad.TimelineAnimator.java

private void animateChangeImpl(Change change) {
    final View oldView = change.getOldView();
    if (oldView != null) {
        final ViewHolder oldHolder = change.oldHolder;
        changeAnimations.add(oldHolder);
        final ViewPropertyAnimatorCompat oldAnim = ViewCompat.animate(oldView);
        oldAnim.setDuration(getChangeDuration()).translationX(change.deltaX()).translationY(change.deltaY())
                .alpha(0).setListener(new ViewPropertyAnimatorListenerAdapter() {
                    @Override/*from   w  w  w  .j  a v a  2  s.  com*/
                    public void onAnimationStart(View view) {
                        dispatchChangeStarting(oldHolder, true);
                    }

                    @Override
                    public void onAnimationEnd(View view) {
                        oldAnim.setListener(null);
                        ViewCompat.setTranslationX(view, 0);
                        ViewCompat.setTranslationY(view, 0);
                        ViewCompat.setAlpha(view, 1);
                        dispatchChangeFinished(oldHolder, true);
                        changeAnimations.remove(oldHolder);
                        dispatchFinishedWhenDone();
                    }
                }).start();
    }
    final View newView = change.getNewView();
    if (newView != null) {
        final ViewHolder newHolder = change.newHolder;
        changeAnimations.add(newHolder);
        final ViewPropertyAnimatorCompat newAnim = ViewCompat.animate(newView);
        newAnim.setDuration(0).translationX(0).translationY(0).alpha(1)
                .setListener(new ViewPropertyAnimatorListenerAdapter() {
                    @Override
                    public void onAnimationStart(View view) {
                        dispatchChangeStarting(newHolder, false);
                    }

                    @Override
                    public void onAnimationEnd(View view) {
                        newAnim.setListener(null);
                        ViewCompat.setTranslationX(view, 0);
                        ViewCompat.setTranslationY(view, 0);
                        ViewCompat.setAlpha(view, 1);
                        dispatchChangeFinished(newHolder, false);
                        changeAnimations.remove(newHolder);
                        dispatchFinishedWhenDone();
                    }
                }).start();
    }
}

From source file:com.luseen.luseenbottomnavigation.BottomNavigation.behavior.BottomNavigationBehavior.java

private void ensureOrCancelAnimator(final CoordinatorLayout coordinatorLayout, final V child) {
    if (mOffsetValueAnimator == null) {
        mOffsetValueAnimator = ViewCompat.animate(child);
        mOffsetValueAnimator.setDuration(
                coordinatorLayout.getResources().getInteger(android.R.integer.config_shortAnimTime));
        mOffsetValueAnimator.setInterpolator(INTERPOLATOR);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mOffsetValueAnimator.setUpdateListener(new ViewPropertyAnimatorUpdateListener() {
                @Override/*from   w  w w .  ja  v a 2  s  .  c  o m*/
                public void onAnimationUpdate(View view) {
                    if (null != fabDependentView) {
                        fabDependentView.onDependentViewChanged(coordinatorLayout, child);
                    }
                    if (null != snackbarDependentView) {
                        snackbarDependentView.onDependentViewChanged(coordinatorLayout, child);
                    }

                }
            });
        } else {
            updateDependentViewsRunnable.setViews(coordinatorLayout, child);
            mOffsetValueAnimator.setListener(new ViewPropertyAnimatorListenerAdapter() {
                @Override
                public void onAnimationStart(View view) {
                    handler.postDelayed(updateDependentViewsRunnable, 16);
                }

                @Override
                public void onAnimationEnd(View view) {
                    handler.removeCallbacks(updateDependentViewsRunnable);
                }

                @Override
                public void onAnimationCancel(View view) {
                    handler.removeCallbacks(updateDependentViewsRunnable);
                }
            });
        }
    } else {
        mOffsetValueAnimator.cancel();
    }
}

From source file:com.waz.zclient.pages.main.profile.preferences.dialogs.AddPhoneNumberPreferenceDialogFragment.java

private void showError(final String error) {
    if (TextUtils.equals(errorView.getText(), error)) {
        return;//from  w  w w.  ja  v a 2  s  .  c om
    }

    final boolean animate = ViewCompat.isLaidOut(containerView);
    final boolean errorShown = !TextUtils.isEmpty(error);

    ViewCompat.animate(errorView).cancel();
    if (errorShown) {
        errorView.setText(error);
        errorView.setVisibility(View.VISIBLE);

        if (animate) {
            if (MathUtils.floatEqual(ViewCompat.getAlpha(errorView), 1f)) {
                ViewCompat.setAlpha(errorView, 0f);
            }
            ViewCompat.animate(errorView).alpha(1f).setDuration(ANIMATION_DURATION)
                    .setInterpolator(LINEAR_OUT_SLOW_IN_INTERPOLATOR)
                    .setListener(new ViewPropertyAnimatorListenerAdapter() {
                        @Override
                        public void onAnimationStart(View view) {
                            view.setVisibility(View.VISIBLE);
                        }
                    }).start();
        }
    } else {
        if (errorView.getVisibility() == View.VISIBLE) {
            if (animate) {
                ViewCompat.animate(errorView).alpha(0f).setDuration(ANIMATION_DURATION)
                        .setInterpolator(FAST_OUT_LINEAR_IN_INTERPOLATOR)
                        .setListener(new ViewPropertyAnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(View view) {
                                errorView.setText(error);
                                view.setVisibility(View.INVISIBLE);

                                updateEditTextBackground(countryEditText);
                                updateEditTextBackground(phoneEditText);
                            }
                        }).start();
            } else {
                errorView.setVisibility(View.INVISIBLE);
            }
        }
    }

    updateEditTextBackground(countryEditText);
    updateEditTextBackground(phoneEditText);
}

From source file:ren.qinc.markdowneditors.base.BaseActivity.java

/**
 * ???ActionMode??//from   w  w  w .  ja  va  2  s.  co  m
 *
 * @param activity
 * @param mode
 */
private void fixActionModeCallback(AppCompatActivity activity, ActionMode mode) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
        return;

    if (!(mode instanceof StandaloneActionMode))
        return;

    try {
        final Field mCallbackField = mode.getClass().getDeclaredField("mCallback");
        mCallbackField.setAccessible(true);
        final Object mCallback = mCallbackField.get(mode);

        final Field mWrappedField = mCallback.getClass().getDeclaredField("mWrapped");
        mWrappedField.setAccessible(true);
        final ActionMode.Callback mWrapped = (ActionMode.Callback) mWrappedField.get(mCallback);

        final Field mDelegateField = AppCompatActivity.class.getDeclaredField("mDelegate");
        mDelegateField.setAccessible(true);
        final Object mDelegate = mDelegateField.get(activity);

        mCallbackField.set(mode, new ActionMode.Callback() {

            @Override
            public boolean onCreateActionMode(android.support.v7.view.ActionMode mode, Menu menu) {
                return mWrapped.onCreateActionMode(mode, menu);
            }

            @Override
            public boolean onPrepareActionMode(android.support.v7.view.ActionMode mode, Menu menu) {
                return mWrapped.onPrepareActionMode(mode, menu);
            }

            @Override
            public boolean onActionItemClicked(android.support.v7.view.ActionMode mode, MenuItem item) {
                return mWrapped.onActionItemClicked(mode, item);
            }

            @Override
            public void onDestroyActionMode(final android.support.v7.view.ActionMode mode) {
                Class mDelegateClass = mDelegate.getClass().getSuperclass();
                Window mWindow = null;
                PopupWindow mActionModePopup = null;
                Runnable mShowActionModePopup = null;
                ActionBarContextView mActionModeView = null;
                AppCompatCallback mAppCompatCallback = null;
                ViewPropertyAnimatorCompat mFadeAnim = null;
                android.support.v7.view.ActionMode mActionMode = null;

                Field mFadeAnimField = null;
                Field mActionModeField = null;

                while (mDelegateClass != null) {
                    try {
                        if (TextUtils.equals("AppCompatDelegateImplV7", mDelegateClass.getSimpleName())) {
                            Field mActionModePopupField = mDelegateClass.getDeclaredField("mActionModePopup");
                            mActionModePopupField.setAccessible(true);
                            mActionModePopup = (PopupWindow) mActionModePopupField.get(mDelegate);

                            Field mShowActionModePopupField = mDelegateClass
                                    .getDeclaredField("mShowActionModePopup");
                            mShowActionModePopupField.setAccessible(true);
                            mShowActionModePopup = (Runnable) mShowActionModePopupField.get(mDelegate);

                            Field mActionModeViewField = mDelegateClass.getDeclaredField("mActionModeView");
                            mActionModeViewField.setAccessible(true);
                            mActionModeView = (ActionBarContextView) mActionModeViewField.get(mDelegate);

                            mFadeAnimField = mDelegateClass.getDeclaredField("mFadeAnim");
                            mFadeAnimField.setAccessible(true);
                            mFadeAnim = (ViewPropertyAnimatorCompat) mFadeAnimField.get(mDelegate);

                            mActionModeField = mDelegateClass.getDeclaredField("mActionMode");
                            mActionModeField.setAccessible(true);
                            mActionMode = (android.support.v7.view.ActionMode) mActionModeField.get(mDelegate);

                        } else if (TextUtils.equals("AppCompatDelegateImplBase",
                                mDelegateClass.getSimpleName())) {
                            Field mAppCompatCallbackField = mDelegateClass
                                    .getDeclaredField("mAppCompatCallback");
                            mAppCompatCallbackField.setAccessible(true);
                            mAppCompatCallback = (AppCompatCallback) mAppCompatCallbackField.get(mDelegate);

                            Field mWindowField = mDelegateClass.getDeclaredField("mWindow");
                            mWindowField.setAccessible(true);
                            mWindow = (Window) mWindowField.get(mDelegate);
                        }

                        mDelegateClass = mDelegateClass.getSuperclass();
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }

                if (mActionModePopup != null) {
                    mWindow.getDecorView().removeCallbacks(mShowActionModePopup);
                }

                if (mActionModeView != null) {
                    if (mFadeAnim != null) {
                        mFadeAnim.cancel();
                    }

                    mFadeAnim = ViewCompat.animate(mActionModeView).alpha(0.0F);

                    final PopupWindow mActionModePopupFinal = mActionModePopup;
                    final ActionBarContextView mActionModeViewFinal = mActionModeView;
                    final ViewPropertyAnimatorCompat mFadeAnimFinal = mFadeAnim;
                    final AppCompatCallback mAppCompatCallbackFinal = mAppCompatCallback;
                    final android.support.v7.view.ActionMode mActionModeFinal = mActionMode;
                    final Field mFadeAnimFieldFinal = mFadeAnimField;
                    final Field mActionModeFieldFinal = mActionModeField;

                    mFadeAnim.setListener(new ViewPropertyAnimatorListenerAdapter() {
                        public void onAnimationEnd(View view) {
                            mActionModeViewFinal.setVisibility(View.GONE);
                            if (mActionModePopupFinal != null) {
                                mActionModePopupFinal.dismiss();
                            } else if (mActionModeViewFinal.getParent() instanceof View) {
                                ViewCompat.requestApplyInsets((View) mActionModeViewFinal.getParent());
                            }

                            mActionModeViewFinal.removeAllViews();
                            mFadeAnimFinal.setListener((ViewPropertyAnimatorListener) null);

                            try {
                                if (mFadeAnimFieldFinal != null) {
                                    mFadeAnimFieldFinal.set(mDelegate, null);
                                }
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }

                            mWrapped.onDestroyActionMode(mode);

                            if (mAppCompatCallbackFinal != null) {
                                mAppCompatCallbackFinal.onSupportActionModeFinished(mActionModeFinal);
                            }

                            try {
                                if (mActionModeFieldFinal != null) {
                                    mActionModeFieldFinal.set(mDelegate, null);
                                }
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }
            }
        });

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

From source file:com.sinyuk.jianyimaterial.widgets.FloatingToolbar.java

private void hideDefaultImpl() {
    ViewCompat.animate(mFab).x(mFabOriginalX).y(mFabOriginalY).scaleX(1f).scaleY(1f)
            .setStartDelay(FAB_UNMORPH_DELAY).setDuration(FAB_UNMORPH_DURATION)
            .setInterpolator(new AccelerateInterpolator())
            .setListener(new ViewPropertyAnimatorListenerAdapter() {
                @Override/*from  ww w.  j ava 2 s . co m*/
                public void onAnimationStart(View view) {
                    super.onAnimationStart(view);
                    mFab.setVisibility(View.VISIBLE);
                    ViewCompat.animate(mFab).setListener(null);
                }
            });

    ViewCompat.animate(this).scaleX(0f).setDuration(CIRCULAR_UNREVEAL_DURATION)
            .setStartDelay(CIRCULAR_UNREVEAL_DELAY).setInterpolator(new AccelerateDecelerateInterpolator())
            .setListener(new ViewPropertyAnimatorListenerAdapter() {

                @Override
                public void onAnimationEnd(View view) {
                    super.onAnimationEnd(view);
                    setVisibility(View.INVISIBLE);
                    ViewCompat.animate(FloatingToolbar.this).setListener(null);
                    mMorphing = false;
                }
            });
}

From source file:im.ene.lab.attiq.ui.activities.SearchActivity.java

@OnClick({ R.id.scrim, R.id.searchback })
  protected void dismiss() {
      // if we're showing search mRecyclerView, circular hide them
      if (mResultsContainer.getHeight() > 0) {
          ViewCompat.animate(mResultsContainer).alpha(0.f).setDuration(400L).setInterpolator(LINEAR_OUT_SLOW_INT)
                  .start();/*from w  w  w .  ja v a  2s. c  o m*/

          Animator closeResults = ViewAnimationUtils.createCircularReveal(mResultsContainer, mSearchIconCenterX,
                  0, (float) Math.hypot(mSearchIconCenterX, mResultsContainer.getHeight()), 0f);
          closeResults.setDuration(500L);
          closeResults.setInterpolator(LINEAR_OUT_SLOW_INT);
          closeResults.addListener(new AnimatorListenerAdapter() {
              @Override
              public void onAnimationEnd(Animator animation) {
                  mResultsContainer.setVisibility(View.INVISIBLE);
              }
          });

          closeResults.start();
      }

      // translate the icon to match position in the launching activity
      ViewCompat.animate(mSearchNavButtonContainer).translationX(mSearchBackDistanceX).alpha(0.f)
              .setDuration(600L).setInterpolator(LINEAR_OUT_SLOW_INT)
              .setListener(new ViewPropertyAnimatorListenerAdapter() {
                  @Override
                  public void onAnimationEnd(View view) {
                      ActivityCompat.finishAfterTransition(SearchActivity.this);
                  }
              }).start();
      // transform from back icon to search icon
      mSearchNavButton.setImageResource(R.drawable.ic_search_24dp_black);
      // clear the background else the touch ripple moves with the translation which looks bad
      mSearchNavButton.setBackground(null);
      // fade out the other search chrome
      ViewCompat.animate(mSearchView).alpha(0f).setStartDelay(0L).setDuration(120L)
              .setInterpolator(LINEAR_OUT_SLOW_INT).setListener(null).start();
      ViewCompat.animate(mSearchBackground).alpha(0f).setStartDelay(300L).setDuration(160L)
              .setInterpolator(LINEAR_OUT_SLOW_INT).setListener(null).start();
      if (ViewCompat.getZ(mSearchToolbar) != 0f) {
          ViewCompat.animate(mSearchToolbar).z(0f).setDuration(600L).setInterpolator(LINEAR_OUT_SLOW_INT).start();
      }

      // fade out the mScrim
      ViewCompat.animate(mScrim).alpha(0f).setDuration(400L).setInterpolator(LINEAR_OUT_SLOW_INT)
              .setListener(null).start();
  }

From source file:com.oginotihiro.snackbar.Snackbar.java

private void animateViewIn() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        ViewPropertyAnimatorCompat vpac = ViewCompat.animate(mView);

        if (mDirection == LEFT_RIGHT) {
            ViewCompat.setTranslationX(mView, -mView.getWidth());
            vpac.translationX(0f);//from w  w  w  .  j a va  2 s.co m
        } else if (mDirection == TOP_BOTTOM) {
            ViewCompat.setTranslationY(mView, -mView.getHeight());
            vpac.translationY(0f);
        } else if (mDirection == RIGHT_LEFT) {
            ViewCompat.setTranslationX(mView, mView.getWidth());
            vpac.translationX(0f);
        } else if (mDirection == BOTTOM_TOP) {
            ViewCompat.setTranslationY(mView, mView.getHeight());
            vpac.translationY(0f);
        }

        vpac.setInterpolator(new FastOutSlowInInterpolator()).setDuration(mAnimDuration)
                .setListener(new ViewPropertyAnimatorListenerAdapter() {
                    @Override
                    public void onAnimationStart(View view) {
                        mView.animateChildrenIn(mAnimDuration - mAnimFadeDuration, mAnimFadeDuration);
                    }

                    @Override
                    public void onAnimationEnd(View view) {
                        if (mCallback != null) {
                            mCallback.onShow(Snackbar.this);
                        }
                        SnackbarManager.getInstance().onShown(mManagerCallback);
                    }
                }).start();
    } else {
        Animation anim = null;

        if (mDirection == LEFT_RIGHT) {
            anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.oginotihiro_snackbar_left_in);
        } else if (mDirection == TOP_BOTTOM) {
            anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.oginotihiro_snackbar_top_in);
        } else if (mDirection == RIGHT_LEFT) {
            anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.oginotihiro_snackbar_right_in);
        } else if (mDirection == BOTTOM_TOP) {
            anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.oginotihiro_snackbar_bottom_in);
        }

        if (anim == null)
            return;

        anim.setInterpolator(new FastOutSlowInInterpolator());
        anim.setDuration(mAnimDuration);
        anim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if (mCallback != null) {
                    mCallback.onShow(Snackbar.this);
                }
                SnackbarManager.getInstance().onShown(mManagerCallback);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });
        mView.setAnimation(anim);
    }
}

From source file:im.ene.lab.attiq.ui.activities.ItemDetailActivity.java

private void trySetupContentView() {
    mContentView.setVerticalScrollBarEnabled(false);
    mContentView.setHorizontalScrollBarEnabled(false);
    mContentView.getSettings().setJavaScriptEnabled(true);

    mContentView.setWebChromeClient(new WebChromeClient() {
        @Override// w ww .j a  va2  s. co m
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            Log.d(TAG, "newProgress = [" + newProgress + "]");
        }
    });

    mContentView.addJavascriptInterface(this, "Attiq");
    mContentView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                return true;
            } else {
                return false;
            }
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            if (!mIsFirstTimeLoaded && mLoadingView != null) {
                mLoadingView.setAlpha(1.f);
                mLoadingView.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onPageFinished(final WebView view, String url) {
            super.onPageFinished(view, url);
            if (PrefUtil.isMathJaxEnabled()) {
                view.evaluateJavascript("javascript:document.getElementById('content').innerHTML='"
                        + doubleEscapeTeX(mArticle.getRenderedBody()) + "';", null);
                view.evaluateJavascript("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);",
                        new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String value) {
                                view.loadUrl("javascript:(function () "
                                        + "{document.getElementsByTagName('body')[0].style.marginBottom = '0'})()");
                            }
                        });
            }

            mIsFirstTimeLoaded = true;
            if (mLoadingView != null) {
                ViewCompat.animate(mLoadingView).alpha(0.f).setDuration(300)
                        .setListener(new ViewPropertyAnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(View view) {
                                if (mLoadingView != null) {
                                    mLoadingView.setVisibility(View.GONE);
                                }
                            }
                        }).start();
            }
        }
    });

    mContentView.setFindListener(new WebView.FindListener() {
        @Override
        public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
            if (mMenuLayout != null) {
                mMenuLayout.closeDrawer(GravityCompat.END);
            }
            if (numberOfMatches > 0 && mMenuAnchor != null && mContentView != null) {
                // FIXME Doesn't work now, because WebView is staying inside ScrollView
                mContentView.loadUrl("javascript:scrollToElement(\"" + mMenuAnchor.text() + "\");");
            }
        }
    });
}