我怎样才能捕捉到视图变得可见
Posted
技术标签:
【中文标题】我怎样才能捕捉到视图变得可见【英文标题】:How can I catch that View become visible 【发布时间】:2012-12-11 15:21:11 【问题描述】:我在 ScrollView 上膨胀视图。
我需要获取事件,当滚动此视图之一(例如,最后一个或特殊类型)变得可见时(在屏幕区域中)。
【问题讨论】:
【参考方案1】:如果视图改变可见性,则调用 onlayout 方法,您可以尝试覆盖该方法并检查其状态。
【讨论】:
【参考方案2】:您需要覆盖视图的onVisibilityChanged()
。当视图的祖先之一更改可见性时,也会调用此方法。
【讨论】:
【参考方案3】:这我膨胀了我的 GridView 并得到你想要的
public class MyGrideView extends GridView
boolean expanded = false;
public MyGrideView(Context context)
super(context);
public MyGrideView(Context context, AttributeSet attrs)
super(context, attrs);
public MyGrideView(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
public boolean isExpanded()
return expanded;
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
// HACK! TAKE THAT android!
if (isExpanded())
// Calculate entire height by providing a very large height hint.
// But do not use the highest 2 bits of this integer; those are
// reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
public void setExpanded(boolean expanded)
this.expanded = expanded;
【讨论】:
这是“onInflate”的示例,但我找到了“onScroll”的解决方案。例如,当我们滚动到 Android 中 MainMenu 的顶部或末尾时,此边框以蓝色突出显示。这是一些事件,所以我需要在我的应用程序中捕获这个事件。 这不能回答问题以上是关于我怎样才能捕捉到视图变得可见的主要内容,如果未能解决你的问题,请参考以下文章
当 viewController 的视图变得可见时,视图的框架设置不正确