【问题标题】:Determine which view items are visible and most centered in a horizontal scrollview in android?确定哪些视图项在 android 的水平滚动视图中可见且最居中?
【发布时间】:2014-05-21 00:48:12
【问题描述】:

我有一个在 xml 中定义的自定义水平滚动视图:

<com.myapp.views.MyHorizontalScrollView
    android:id="@+id/myScrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:id="@+id/myLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

    </LinearLayout>
</com.myapp.views.MyHorizontalScrollView>

我正在动态膨胀并将子视图添加到线性布局(如上)。到目前为止效果很好。

另外,我扩展了水平滚动视图。这是为了添加一个 onscroll 监听器,它给我 onscroll 事件,并且似乎正在工作

问题

当用户在滚动视图上滚动时,我需要确定是否有任何视图现在对用户可见,即显示在屏幕上。

另外,我想确定滚动视图中最居中的视图(再次对用户可见)

这可能吗?

【问题讨论】:

    标签: android android-layout android-listview android-linearlayout android-scrollview


    【解决方案1】:

    要确定视图是否可见,您可以像 Bill Mote 一样执行此操作

     Rect scrollBounds = new Rect();
    scrollView.getHitRect(scrollBounds);
    if (imageView.getLocalVisibleRect(scrollBounds)) {
        // Any portion of the imageView, even a single pixel, is within the visible window
    } else {
        // NONE of the imageView is within the visible window
    }
    

    被声明为这个问题的答案Android: how to check if a View inside of ScrollView is visible?

    在那里你可以通过一些数学和你添加视图的顺序来看看哪个更集中

    【讨论】:

    • 谢谢我之前尝试过这个答案(但它似乎没有用),但现在我再次尝试了它,它似乎可以解决问题。 (不知道我之前做错了什么)。计算出最居中的项目需要什么计算?
    • 只要线性布局上的项目按顺序排列,您应该会看到第一个部分可见的视图和最后一个,而且两者中间的视图将是居中的,例如,如果您有 6 个视图,从 2 到 6(2,3,4,5,6),其中 4 是中间的
    • 此外,如果您有奇数个视图,您可以使用 scrollBounds.getWidth() - imageView.getWidth() 来查看两侧的哪些视图更明显,以推断哪个视图更多从中间的两个居中
    • 获取可见项目的中间项目效果很好,但如果我在其中一个子视图上添加额外的填充,比如第一个,可见项目的中间在中心更长。跨度>
    • 这是确定项目是否在屏幕上可见并获得居中的正确答案(假设它们的宽度相同)。所以将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多