下面列出了android.view.ViewTreeObserver#OnScrollChangedListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public ViewTreeObserver.OnScrollChangedListener getOnScrollChangedListener() {
if (mOnScrollChangedListener == null) {
mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
//BlurDrawable
ViewCompat.postInvalidateOnAnimation(mBlurDrawableRelativeLayout);
//BlurMaskRelativeLayout
int scrollY = mScrollView.getScrollY();
Log.i("robin","scrollY:"+scrollY);
float alpha = (float) scrollY/1000;
if (alpha > 1f) {
alpha = 1f;
}
Log.i("robin","alpha:"+alpha);
mBlurMaskRelativeLayout.setAlpha(1f-(alpha));
}
};
}
return mOnScrollChangedListener;
}
/**
* Sets observer. See {@link Observer}. Regardless of the passed value, notifications for
* the previous observer will be canceled.
*
* @param observer Instance that will receive notifications, or null to clear the observer.
*/
public void setObserver(@Nullable Observer observer) {
removeObservers();
if (observer == null) return;
mObserver = observer;
mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
checkScrolledToBottom();
}
};
getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
checkScrolledToBottom();
}
};
getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener);
}
private ViewTreeObserver.OnScrollChangedListener getScrollChangedListener() {
if (mScrollChangedListener == null) {
mScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
/**
* Callback method to be invoked when something in the view tree
* has been scrolled.
*/
@Override
public void onScrollChanged() {
//Log.d(TAG, "onScrollChanged() called");
invalidate();
}
};
}
return mScrollChangedListener;
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void addScrollListener(final ViewGroup vg, final boolean setForTop, final boolean setForBottom) {
if ((!setForBottom && mTopOnScrollChangedListener == null
|| (setForBottom && mBottomOnScrollChangedListener == null))) {
ViewTreeObserver.OnScrollChangedListener onScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
boolean hasButtons = false;
for (MDButton button : mButtons) {
if (button != null && button.getVisibility() != View.GONE) {
hasButtons = true;
break;
}
}
if (vg instanceof WebView) {
invalidateDividersForWebView((WebView) vg, setForTop, setForBottom, hasButtons);
} else {
invalidateDividersForScrollingView(vg, setForTop, setForBottom, hasButtons);
}
invalidate();
}
};
if (!setForBottom) {
mTopOnScrollChangedListener = onScrollChangedListener;
vg.getViewTreeObserver().addOnScrollChangedListener(mTopOnScrollChangedListener);
} else {
mBottomOnScrollChangedListener = onScrollChangedListener;
vg.getViewTreeObserver().addOnScrollChangedListener(mBottomOnScrollChangedListener);
}
onScrollChangedListener.onScrollChanged();
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
public ViewTreeObserver.OnScrollChangedListener getOnScrollChangedListener() {
if (mOnScrollChangedListener == null) {
mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
//BlurDrawable
ViewCompat.postInvalidateOnAnimation(mBlurDrawableRelativeLayout);
}
};
}
return mOnScrollChangedListener;
}
/**
* Prepare scroll view related animations and floating wishlist button.
*
* @param view fragment base view.
*/
private void prepareScrollViewAndWishlist(View view) {
final View productBackground = view.findViewById(R.id.product_background);
wishlistButton = view.findViewById(R.id.product_add_to_wish_list);
scrollViewListener = new ViewTreeObserver.OnScrollChangedListener() {
private boolean alphaFull = false;
@Override
public void onScrollChanged() {
int scrollY = contentScrollLayout.getScrollY();
if (productImagesRecycler != null) {
if (wishlistButton.getWidth() * 2 > scrollY) {
wishlistButton.setTranslationX(scrollY / 4);
} else {
wishlistButton.setTranslationX(wishlistButton.getWidth() / 2);
}
float alphaRatio;
if (productImagesRecycler.getHeight() > scrollY) {
productImagesRecycler.setTranslationY(scrollY / 2);
alphaRatio = (float) scrollY / productImagesRecycler.getHeight();
} else {
alphaRatio = 1;
}
// Timber.e("scrollY:" + scrollY + ". Alpha:" + alphaRatio);
if (alphaFull) {
if (alphaRatio <= 0.99) alphaFull = false;
} else {
if (alphaRatio >= 0.9) alphaFull = true;
productBackground.setAlpha(alphaRatio);
}
} else {
Timber.e("Null productImagesScroll");
}
}
};
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
applyParallax();
}
};
mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
heightView = (float) getHeight();
widthView = (float) getWidth();
applyParallax();
}
};
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnScrollChangedListener(mOnScrollChangedListener);
viewTreeObserver.addOnGlobalLayoutListener(mOnGlobalLayoutListener);
if (updateOnDraw
&& android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
onDrawListener = new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
applyParallax();
}
};
viewTreeObserver.addOnDrawListener(onDrawListener);
}
parallaxAnimation();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
applyParallax();
}
};
mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
heightImageView = (float) getHeight();
widthImageView = (float) getWidth();
applyParallax();
}
};
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnScrollChangedListener(mOnScrollChangedListener);
viewTreeObserver.addOnGlobalLayoutListener(mOnGlobalLayoutListener);
if (updateOnDraw
&& android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
onDrawListener = new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
applyParallax();
}
};
viewTreeObserver.addOnDrawListener(onDrawListener);
}
parallaxAnimation();
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}
private void init() {
if (superListenerField != null) {
try {
mSuperScrollListener = (ViewTreeObserver.OnScrollChangedListener) superListenerField.get(this);
superListenerField.set(this, NOP);
} catch (Exception e) {
mSuperScrollListener = null;
}
}
}