2013-07-04 3 views
0

У меня есть горизонтальный вид прокрутки, у меня также есть relativelayout как его ребенок. Я добавляю детские представления этого релятивирования динамически. У меня есть текст заголовка, который должен обновляться при прокрутке в соответствии с соответствующими дочерними представлениями. Как я могу это сделать, потому что я могу получить текущий сфокусированный элемент в горизонтальном прокрутке. Пожалуйста, дайте мне какое-нибудь предложение или примеры, которые могут быть полезны для меня, спасибо ..Как изменить заголовок TextView Text при прокрутке горизонтального scrollView?

ответ

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 и обновлять заголовок, когда пользователь перемещает палец по экрану (вы также должны учитывать инерцию после пользователя останавливает нажатие).

EDIT: Как получить сфокусированный View

Прежде всего, у меня только есть опыт делать такие вещи, как это, так что я не уверен, если это будет работать, или если есть лучшие способы сделать это , Я просто скажу вам, как я подхожу к этой проблеме.

Для того, чтобы знать сфокусированный взгляд, вам нужно знать координаты, в которых должен находиться этот вид. Поскольку это горизонтальный 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(); 
} 

Опять же, я не уверен, если это будет работать, это просто идея о том, как подойти к вашей проблеме. Кроме того, вы должны принять это во внимание:

getWidth() and getHeight() of View returns 0

+0

Как могу ли я знать, какой предмет сосредоточен, пожалуйста, дайте мне несколько советов по этому вопросу. – user2349315

+0

Я думал, что вы уже делали это: «Я могу получить текущий сфокусированный элемент в горизонтальном прокрутке». Мне нужно знать пару вещей о вашем приложении. Под «сфокусированным элементом» вы подразумеваете «Вид», который находится прямо в середине ScrollView? –

+0

Да, точно, я хочу получить сфокусированный идентификатор вида, который находится в середине горизонтального прокрутки. – user2349315

0

Вы должны указать OnTouchListener для вашего HorizontalScrollView и в это onTouch() метода определения типа MotionEvent и изменить цвет ваших TextView «S к соответствующим

Смежные вопросы