0

我有一个水平滚动视图,我也有一个相对布局,因为它是孩子。我正在动态添加此相对布局的子视图。我有一个标题文本,当我根据各自的子视图滚动时应该更新它。我该怎么做,因为我能够在水平滚动中获得当前的焦点项目。请给我一些建议或例子,对我有帮助,谢谢..

4

2 回答 2

0

如果您正在动态创建这个孩子,您可以为他们设置一个标签,其中包含您想要在标题中显示的内容TextView

//Creating RelativeLayout childs
TextView newChild = new TextView(this).
newChild.setTag(textToShowWhenThisItemIsFocused);

然后,如果您知道哪个项目是重点,您只需要获取标签。

// "selected" is the focused view
header.setText((String) selected.getTag());

何时使用第二个代码取决于您的实现。由于您没有提供任何代码,因此很难知道如何监视滚动,但即Touch Events当用户在屏幕上移动手指时,您可以控制和更新标题(您还应该考虑用户停止后的惯性窃听)。

编辑:如何获得焦点视图

首先,我几乎没有做这样的事情的经验,所以我不确定这是否会奏效,或者是否有更好的方法来做到这一点。我只会告诉你我会如何解决这个问题。

为了能够知道焦点视图,您需要知道这个视图应该在哪里的坐标。因为它是一个水平的 ScrollView,我们需要 X 坐标。因为我们想要在 ScrollView 中间的视图,所以我会这样做:

private int centerSV;
private ScrollView mScrollView;

...

    centerSV = mScrollView.getWidth()/2;

现在我们有了 ScrollView 的中心。现在我们需要知道哪个孩子处于这个位置:

private int getFocusedChildId(){

    for(int i=0; i<mChilds.length; i++){
        int childLeftCoord = mChilds[i].getLeft() - mScrollView.getScrollX();

        if(childLeftCoord <= centerSV && centerSV <= childLeftCoord + mChilds[i].getWidth())
            return mChilds[i].getId();
    }

    // No view found in the center, maybe ScrollView wasn't full. Return the first one
    return mChilds[0].getId();
}

同样,我不确定这是否会起作用,这只是关于如何解决您的问题的一个想法。此外,您应该考虑到这一点:

View 的 getWidth() 和 getHeight() 返回 0

于 2013-07-04T07:19:21.977 回答
0

OnTouchListener您应该为您的HorizontalScrollView和在它的方法中指定一个onTouch()检测类型MotionEvent并将您TextView的颜色更改为适当的

于 2013-07-04T07:25:52.780 回答