android.view.ViewTreeObserver#isAlive ( )源码实例Demo

下面列出了android.view.ViewTreeObserver#isAlive ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

/**
 * Removes global layout listener added in {@link #addGlobalLayoutListener()}.
 */
void removeGlobalLayoutListener()
{
    final ViewGroup parent = (ViewGroup) mView.getParent();
    if (parent == null)
    {
        return;
    }
    final ViewTreeObserver viewTreeObserver = ((ViewGroup) mView.getParent()).getViewTreeObserver();
    if (viewTreeObserver.isAlive())
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        {
            viewTreeObserver.removeOnGlobalLayoutListener(mGlobalLayoutListener);
        }
        else
        {
            viewTreeObserver.removeGlobalOnLayoutListener(mGlobalLayoutListener);
        }
    }
}
 
源代码2 项目: giffun   文件: ViewTarget.java
private void checkCurrentDimens() {
    if (cbs.isEmpty()) {
        return;
    }

    int currentWidth = getViewWidthOrParam();
    int currentHeight = getViewHeightOrParam();
    if (!isSizeValid(currentWidth) || !isSizeValid(currentHeight)) {
        return;
    }

    notifyCbs(currentWidth, currentHeight);
    // Keep a reference to the layout listener and remove it here
    // rather than having the observer remove itself because the observer
    // we add the listener to will be almost immediately merged into
    // another observer and will therefore never be alive. If we instead
    // keep a reference to the listener and remove it here, we get the
    // current view tree observer and should succeed.
    ViewTreeObserver observer = view.getViewTreeObserver();
    if (observer.isAlive()) {
        observer.removeOnPreDrawListener(layoutListener);
    }
    layoutListener = null;
}
 
源代码3 项目: zen4android   文件: ActivityChooserView.java
@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    ActivityChooserModel dataModel = mAdapter.getDataModel();
    if (dataModel != null) {
        try {
            dataModel.unregisterObserver(mModelDataSetOberver);
        } catch (IllegalStateException e) {
            //Oh, well... fixes issue #557
        }
    }
    ViewTreeObserver viewTreeObserver = getViewTreeObserver();
    if (viewTreeObserver.isAlive()) {
        viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
    }
    mIsAttachedToWindow = false;
}
 
源代码4 项目: Slide   文件: Profile.java
private void scrollToTabAfterLayout(final int tabIndex) {
    //from http://stackoverflow.com/a/34780589/3697225
    if (tabs != null) {
        final ViewTreeObserver observer = tabs.getViewTreeObserver();

        if (observer.isAlive()) {
            observer.dispatchOnGlobalLayout(); // In case a previous call is waiting when this call is made
            observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    tabs.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    tabs.getTabAt(tabIndex).select();
                }
            });
        }
    }
}
 
源代码5 项目: Slide   文件: NewsActivity.java
private void scrollToTabAfterLayout(final int tabIndex) {
    //from http://stackoverflow.com/a/34780589/3697225
    if (mTabLayout != null) {
        final ViewTreeObserver observer = mTabLayout.getViewTreeObserver();

        if (observer.isAlive()) {
            observer.dispatchOnGlobalLayout(); // In case a previous call is waiting when this call is made
            observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    mTabLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    mTabLayout.getTabAt(tabIndex).select();
                }
            });
        }
    }
}
 
源代码6 项目: litho   文件: LithoScrollView.java
void mount(
    ComponentTree contentComponentTree,
    final ScrollPosition scrollPosition,
    boolean isIncrementalMountEnabled) {
  mLithoView.setComponentTree(contentComponentTree);

  mIsIncrementalMountEnabled = isIncrementalMountEnabled;
  mScrollPosition = scrollPosition;
  final ViewTreeObserver.OnPreDrawListener onPreDrawListener =
      new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
          setScrollY(scrollPosition.y);
          ViewTreeObserver currentViewTreeObserver = getViewTreeObserver();
          if (currentViewTreeObserver.isAlive()) {
            currentViewTreeObserver.removeOnPreDrawListener(this);
          }
          return true;
        }
      };
  getViewTreeObserver().addOnPreDrawListener(onPreDrawListener);

  mOnPreDrawListener = onPreDrawListener;
}
 
源代码7 项目: faceswap   文件: FilePicker.java
/**
 * Toggles the material floating action button.
 *
 * @param visible
 */
public void toggleButton(final boolean visible) {
    if (isFabShowing != visible) {
        isFabShowing = visible;
        int height = fab.getHeight();
        if (height == 0) {
            ViewTreeObserver vto = fab.getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = fab.getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggleButton(visible);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height;
        fab.animate().setInterpolator(interpolator)
                .setDuration(350)
                .translationY(translationY);

        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        fab.setClickable(visible);
    }
}
 
源代码8 项目: star-zone-android   文件: PhotoViewAttacher.java
/**
 * Clean-up the resources attached to this object. This needs to be called when the ImageView is
 * no longer used. A good example is from {@link android.view.View#onDetachedFromWindow()} or
 * from {@link android.app.Activity#onDestroy()}. This is automatically called if you are using
 * {@link uk.co.senab.photoview.PhotoView}.
 */
@SuppressWarnings("deprecation")
public void cleanup() {
    if (null == mImageView) {
        return; // cleanup already done
    }

    final ImageView imageView = mImageView.get();

    if (null != imageView) {
        // Remove this as a global layout listener
        ViewTreeObserver observer = imageView.getViewTreeObserver();
        if (null != observer && observer.isAlive()) {
            observer.removeGlobalOnLayoutListener(this);
        }

        // Remove the ImageView's reference to this
        imageView.setOnTouchListener(null);

        // make sure a pending fling runnable won't be run
        cancelFling();
    }

    if (null != mGestureDetector) {
        mGestureDetector.setOnDoubleTapListener(null);
    }

    // Clear listeners too
    mMatrixChangeListener = null;
    mPhotoTapListener = null;
    mViewTapListener = null;

    // Finally, clear ImageView
    mImageView = null;
}
 
源代码9 项目: Scrollable   文件: ViewUtils.java
static void removeGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {

        final ViewTreeObserver observer = view.getViewTreeObserver();
        if (!observer.isAlive()) {
            return;
        }

        if (Build.VERSION.SDK_INT >= 16) {
            observer.removeOnGlobalLayoutListener(onGlobalLayoutListener);
        } else {
            //noinspection deprecation
            observer.removeGlobalOnLayoutListener(onGlobalLayoutListener);
        }
    }
 
/**
 * Adds layout listener to view parent to capture layout changes.
 */
void addGlobalLayoutListener()
{
    final ViewTreeObserver viewTreeObserver = ((ViewGroup) mView.getParent()).getViewTreeObserver();
    if (viewTreeObserver.isAlive())
    {
        viewTreeObserver.addOnGlobalLayoutListener(mGlobalLayoutListener);
    }
}
 
源代码11 项目: MoeGallery   文件: PhotoViewAttacher.java
/**
 * Clean-up the resources attached to this object. This needs to be called when the ImageView is
 * no longer used. A good example is from {@link android.view.View#onDetachedFromWindow()} or
 * from {@link android.app.Activity#onDestroy()}. This is automatically called if you are using
 * {@link uk.co.senab.photoview.PhotoView}.
 */
@SuppressWarnings("deprecation")
public void cleanup() {
    if (null == mImageView) {
        return; // cleanup already done
    }

    final ImageView imageView = mImageView.get();

    if (null != imageView) {
        // Remove this as a global layout listener
        ViewTreeObserver observer = imageView.getViewTreeObserver();
        if (null != observer && observer.isAlive()) {
            observer.removeGlobalOnLayoutListener(this);
        }

        // Remove the ImageView's reference to this
        imageView.setOnTouchListener(null);

        // make sure a pending fling runnable won't be run
        cancelFling();
    }

    if (null != mGestureDetector) {
        mGestureDetector.setOnDoubleTapListener(null);
    }

    // Clear listeners too
    mMatrixChangeListener = null;
    mPhotoTapListener = null;
    mViewTapListener = null;

    // Finally, clear ImageView
    mImageView = null;
}
 
private void toggle(final boolean visible, final boolean animate, boolean force) {
    if (mVisible != visible || force) {
        mVisible = visible;
        int height = floatActionButton.getHeight();
        if (height == 0 && !force) {
            ViewTreeObserver vto = floatActionButton.getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = floatActionButton.getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggle(visible, animate, true);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height + getMarginBottom();
        if (animate) {
            ViewPropertyAnimator.animate(floatActionButton).setInterpolator(mInterpolator)
                    .setDuration(TRANSLATE_DURATION_MILLIS)
                    .translationY(translationY);
        } else {
            ViewHelper.setTranslationY(floatActionButton, translationY);
        }
    }
}
 
源代码13 项目: TestChat   文件: FloatingActionsMenu.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
        if (mVisible != visible || force) {
                mVisible = visible;
                int height = getHeight();
                if (height == 0 && !force) {
                        ViewTreeObserver vto = getViewTreeObserver();
                        if (vto.isAlive()) {
                                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                                        @Override
                                        public boolean onPreDraw() {
                                                ViewTreeObserver currentVto = getViewTreeObserver();
                                                if (currentVto.isAlive()) {
                                                        currentVto.removeOnPreDrawListener(this);
                                                }
                                                toggle(visible, animate, true);
                                                return true;
                                        }
                                });
                                return;
                        }
                }
                int translationY = visible ? 0 : height + mAddButton.getMarginBottom();
                if (animate) {
                        ViewPropertyAnimator.animate(this).setInterpolator(mInterpolator)
                                .setDuration(TRANSLATE_DURATION_MILLIS)
                                .translationY(translationY);
                } else {
                        ViewHelper.setTranslationY(this, translationY);
                }

                // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
                if (!hasHoneycombApi()) {
                        setClickable(visible);
                }
        }
}
 
源代码14 项目: Tweetin   文件: PhotoViewAttacher.java
/**
 * Clean-up the resources attached to this object. This needs to be called when the ImageView is
 * no longer used. A good example is from {@link android.view.View#onDetachedFromWindow()} or
 * from {@link android.app.Activity#onDestroy()}. This is automatically called if you are using
 * {@link uk.co.senab.photoview.PhotoView}.
 */
@SuppressWarnings("deprecation")
public void cleanup() {
    if (null == mImageView) {
        return; // cleanup already done
    }

    final ImageView imageView = mImageView.get();

    if (null != imageView) {
        // Remove this as a global layout listener
        ViewTreeObserver observer = imageView.getViewTreeObserver();
        if (null != observer && observer.isAlive()) {
            observer.removeGlobalOnLayoutListener(this);
        }

        // Remove the ImageView's reference to this
        imageView.setOnTouchListener(null);

        // make sure a pending fling runnable won't be run
        cancelFling();
    }

    if (null != mGestureDetector) {
        mGestureDetector.setOnDoubleTapListener(null);
    }

    // Clear listeners too
    mMatrixChangeListener = null;
    mPhotoTapListener = null;
    mViewTapListener = null;

    // Finally, clear ImageView
    mImageView = null;
}
 
源代码15 项目: Dashboard   文件: PhotoViewAttacher.java
/**
 * Clean-up the resources attached to this object. This needs to be called
 * when the ImageView is no longer used. A good example is from
 * {@link android.view.View#onDetachedFromWindow()} or from
 * {@link android.app.Activity#onDestroy()}. This is automatically called if
 * you are using {@link com.antonioleiva.materialeverywhere.uk.co.senab.photoview.PhotoView}.
 */
@SuppressWarnings("deprecation")
public final void cleanup() {
    if (null == mImageView) {
        return; // cleanup already done
    }

    final ImageView imageView = mImageView.get();

    if (null != imageView) {
        // Remove this as a global layout listener
        ViewTreeObserver observer = imageView.getViewTreeObserver();
        if (null != observer && observer.isAlive()) {
            observer.removeGlobalOnLayoutListener(this);
        }

        // Remove the ImageView's reference to this
        imageView.setOnTouchListener(null);

        // make sure a pending fling runnable won't be run
        cancelFling();
    }

    if (null != mGestureDetector) {
        mGestureDetector.setOnDoubleTapListener(null);
    }

    // Clear listeners too
    mMatrixChangeListener = null;
    mPhotoTapListener = null;
    mViewTapListener = null;

    // Finally, clear ImageView
    mImageView = null;
}
 
源代码16 项目: FilePickerLibrary   文件: FilePicker.java
/**
 * Toggles the material floating action button.
 *
 * @param visible
 */
public void toggleButton(final boolean visible) {
    if (isFabShowing != visible) {
        isFabShowing = visible;
        int height = fab.getHeight();
        if (height == 0) {
            ViewTreeObserver vto = fab.getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = fab.getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggleButton(visible);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height;
        fab.animate().setInterpolator(interpolator)
                .setDuration(350)
                .translationY(translationY);

        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        fab.setClickable(visible);
    }
}
 
源代码17 项目: FireFiles   文件: FloatingActionButton.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
    if (mVisible != visible || force) {
        mVisible = visible;
        int height = getHeight();
        if (height == 0 && !force) {
            ViewTreeObserver vto = getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggle(visible, animate, true);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height + getMarginBottom();
        if (animate) {
            animate().setInterpolator(mInterpolator)
                .setDuration(TRANSLATE_DURATION_MILLIS)
                .translationY(translationY);
        } else {
            setTranslationY(translationY);
        }
        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        if (!Utils.hasHoneycomb()) {
            setClickable(visible);
        }
    }

}
 
源代码18 项目: OmniList   文件: PhotoViewAttacher.java
/**
 * Clean-up the resources attached to this object. This needs to be called when the ImageView is
 * no longer used. A good example is from {@link View#onDetachedFromWindow()} or
 * from {@link android.app.Activity#onDestroy()}. This is automatically called if you are using
 * {@link PhotoView}.
 */
@SuppressWarnings("deprecation")
public void cleanup() {
    if (null == mImageView) {
        return; // cleanup already done
    }

    final ImageView imageView = mImageView.get();

    if (null != imageView) {
        // Remove this as a global layout listener
        ViewTreeObserver observer = imageView.getViewTreeObserver();
        if (null != observer && observer.isAlive()) {
            observer.removeGlobalOnLayoutListener(this);
        }

        // Remove the ImageView's reference to this
        imageView.setOnTouchListener(null);

        // make sure a pending fling runnable won't be run
        cancelFling();
    }

    if (null != mGestureDetector) {
        mGestureDetector.setOnDoubleTapListener(null);
    }

    // Clear listeners too
    mMatrixChangeListener = null;
    mPhotoTapListener = null;
    mViewTapListener = null;

    // Finally, clear ImageView
    mImageView = null;
}
 
源代码19 项目: FireFiles   文件: FloatingActionsMenu.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
    if (mVisible != visible || force) {
        mVisible = visible;
        int height = getHeight();
        if (height == 0 && !force) {
            ViewTreeObserver vto = getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggle(visible, animate, true);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height + getMarginBottom();
        if (animate) {
            animate().setInterpolator(mInterpolator)
                .setDuration(TRANSLATE_DURATION_MILLIS)
                .translationY(translationY);
        } else {
            setTranslationY(translationY);
        }
        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        if (!Utils.hasHoneycomb()) {
            setClickable(visible);
        }
    }

    if(isMenuOpen()) {
        closeMenu();
    }
}
 
源代码20 项目: MVPAndroidBootstrap   文件: AnimatedLinearLayout.java
private void waitForNextFrame() {
    ViewTreeObserver treeObserver = getViewTreeObserver();
    if (treeObserver != null && treeObserver.isAlive()) {
        treeObserver.addOnPreDrawListener(new PreDrawListener());
    }
}