我有一个水平滚动视图,我也有一个相对布局,因为它是孩子。我正在动态添加此相对布局的子视图。我有一个标题文本,当我根据各自的子视图滚动时应该更新它。我该怎么做,因为我能够在水平滚动中获得当前的焦点项目。请给我一些建议或例子,对我有帮助,谢谢..
问问题
168 次
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();
}
同样,我不确定这是否会起作用,这只是关于如何解决您的问题的一个想法。此外,您应该考虑到这一点:
于 2013-07-04T07:19:21.977 回答
0
OnTouchListener
您应该为您的HorizontalScrollView
和在它的方法中指定一个onTouch()
检测类型MotionEvent
并将您TextView
的颜色更改为适当的
于 2013-07-04T07:25:52.780 回答