Не можете понять, когда использовать getLeft, setLeft и т. Д. В Android? - PullRequest
0 голосов
/ 20 сентября 2011

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

Я использую анимацию свойств следующим образом:

Например, это перемещает средний кадр на 4/3 его ширины и заставляет его снова появляться на экране, играя с его альфа ...

middleFrame.animate().translationXBy(4*(middleFrame.getWidth())/3).alpha(1.0f);

Однако после анимации я смогу получить измененное левое и правое значение middleFrame, но когда я пытаюсь сделать это, как я уже говорил, это дает мне предыдущие значения ..

Я проверил этот вопрос и ответ Ромена Гая Как получить абсолютные координаты вида

Однако Я не мог понять, когда я могу использовать getLeft / Right илиМетоды getLocationOnScreen () и т. д.

Я уже пробовал getLocationOnScreen или getLocationInWindow, но они возвращают одинаковые результаты.

Заранее спасибо.

1 Ответ

0 голосов
/ 20 сентября 2011

Я также никогда не понимал, почему getLocationOnScreen и getLocationInWindow возвращают одинаковые значения ...

getLeft / Right / Top / Bottom возвращает смещение для просмотра родительского элемента в пикселях. Вы не можете использовать это для анимации, потому что эта информация является статической и предоставляет только информацию о макете.

Простой пример:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="fill_parent" 
            android:text="@string/hello" />
        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="fill_parent" 
            android:text="@string/hello" />
</LinearLayout>

Если вы используете этот макет и анимируете первое текстовое представление с переводом на правую сторону, оно переполнит второе текстовое представление вместо того, чтобы подтолкнуть его на правую сторону. Таким образом, в основном первое текстовое представление все еще находится в своей прежней позиции (getLeft / Right / Top / Bottom с тем же значением), но внутренне было перемещено в другую позицию.

Чтобы перейти непосредственно к делу: анимация - это просто визуальный эффект и не имеет ничего общего с позиционированием макета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...