如何在滚动水平scrollView期间更改标题TextView文本?

时间:2013-07-04 07:09:26

标签: android

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

2 个答案:

答案 0 :(得分:0)

如果您正在使用dinamically创建此子项,则可以使用要在标题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中间使用View,所以我会这样做:

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

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

getWidth() and getHeight() of View returns 0

答案 1 :(得分:0)

您应为OnTouchListener指定HorizontalScrollView,并使用onTouch()方法检测MotionEvent的类型,并将TextView的颜色更改为适当