我怎样才能捕捉到视图变得可见

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 的视图变得可见时,视图的框架设置不正确

我怎样才能让整个文本在edittext中可见?

在视图变得不可见后执行任务

当tableview单元格变得不可见时如何获取UITextField(UITableViewCell的子视图)文本值

如何通过外部按钮在列表视图中设置可见性?

如何在 UITableView 上浮动所有部分标题视图(或保持所有可见)?