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