gpt4 book ai didi

android - 在 ScrollView 中显示 View 时的通知方式?

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:50 25 4
gpt4 key购买 nike

我有一个简单的问题:

假设我对 scrollView(或 horizo​​ntalScrollView)有一些看法。有什么方法可以添加一个监听器,当这样的 View 进入可见区域内外时,它会告诉我?

我见过的唯一类似的问题是: Android: how to check if a View inside of ScrollView is visible?但我想在发生此类事件(变得隐藏/可见)时得到通知。

最佳答案

子类化您正在使用的 View 类(我为 ImageView 做了这个,因为我只是将它们添加到我的 ScrollView 中):

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;
}
}

InViewportListener 附加到此 PeekImageView 的实例将在 View 进入或离开窗口的可见部分(视口(viewport))时通知您。

关于android - 在 ScrollView 中显示 View 时的通知方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com