Инициализация представлений Android ViewFlipper - PullRequest
0 голосов
/ 11 января 2012

В моем приложении у меня есть вкладки в ViewFlipper. Когда действие начинается, я инициализирую все вкладки и представления внутри них.

Но проблема на 3-й вкладке. При инициализации этой вкладки я хочу знать расстояние между TextView и левой стороной родителей. Для этого я вызываю TextView.getLeft ().

Но когда эта вкладка не отображается, я получаю 0 из этого метода. Поэтому я не могу правильно инициализировать вид.

Теперь становится странно: Когда я запускаю действие на первой вкладке, затем перехожу на третью, getLeft возвращает 0 при запуске и при нажатии на вкладку Но когда я запускаю действие на третьей вкладке, getLeft возвращает действительное значение ....

Итак, как я могу получить правильное значение? Я полагаю, что ViewFlipper не имеет правильных координат X, Y видов, когда вкладка не отображается.

Ps. Это было трудно объяснить. Если мне нужно что-то уточнить, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Я заметил, что getLeft вызывался раньше! вкладка фактически выполнена. (Вызов был после setDisplayedChild ())

Для этого мне нужно было знать, когда представление действительно отображается. Я добавил AnimationListener в InAnimation:

ViewFlipper.getInAnimation().setAnimationListener(new AnimationListener() {

    public void onAnimationStart(Animation animation) {
         TextView.getLeft();
    }

    public void onAnimationRepeat(Animation animation) {}
    public void onAnimationEnd(Animation animation) {}
});

Мне не очень нравится это решение. Но это работает.

0 голосов
/ 11 января 2012

Попробуйте это при создании

ViewTreeObserver vto = textview.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        textview.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        Log.e("Width",Integer.toString(textview.getWidth()));

    }
});

onCreate вызывается до отрисовки пользовательского интерфейса, поэтому ширина должна быть равна 0, поскольку измерение или рисование еще не произошло.

...