and*_*per 3 android view listener hide scrollview
我有一个简单的问题:
假设我对 scrollView(或水平滚动视图)有一些看法。有什么方法可以添加一个监听器,它会告诉我这样的视图何时进入可见区域的内部和外部?
我见过的唯一类似问题是: Android:如何检查 ScrollView 中的视图是否可见? 但我想在发生此类事件时得到通知(变得隐藏/可见)。
子类化您正在使用的视图类(我为 ImageView 做了这个,因为我只是将它们添加到我的滚动视图中):
public class PeekImageView extends ImageView implements ViewTreeObserver.OnScrollChangedListener {
private static final String LOG_TAG = "PeekImageView";
private InViewportListener inViewportListener;
private boolean isInViewport = false;
public PeekImageView(Context context) {
super(context);
}
public PeekImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PeekImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public interface InViewportListener {
void onViewportEnter(PeekImageView view);
void onViewportExit(PeekImageView view);
}
public void setInViewportListener(InViewportListener listener) {
this.inViewportListener = listener;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ViewTreeObserver vto = getViewTreeObserver();
if (vto != null) {
vto.addOnScrollChangedListener(this);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
ViewTreeObserver vto = getViewTreeObserver();
if (vto != null) {
vto.removeOnScrollChangedListener(this);
}
}
@Override
public void onScrollChanged() {
Rect bounds = new Rect();
boolean inViewport = getLocalVisibleRect(bounds);
Log.d(LOG_TAG, "is in view " + bounds + " : " + inViewport + " ; " + bounds);
if (inViewportListener != null && isInViewport != inViewport) {
if (inViewport) {
inViewportListener.onViewportEnter(this);
} else {
inViewportListener.onViewportExit(this);
}
}
isInViewport = inViewport;
}
}
Run Code Online (Sandbox Code Playgroud)
将 附加InViewportListener到此实例PeekImageView将在视图进入或离开窗口的可见部分(视口)时通知您。
| 归档时间: |
|
| 查看次数: |
4964 次 |
| 最近记录: |