Функция макета не меняет размер вида. - PullRequest
0 голосов
/ 11 февраля 2011

Я пытаюсь создать вид, который скользит вверх от нижней части экрана. Я попытался установить начальную позицию представления (которая должна быть вне экрана) в xml, но вместо того, чтобы поместить viewview, где я указал, это урезало это. Моя вторая мысль состояла в том, чтобы программно установить позицию представления внутри метода onWindowFocusChanged. Вот мой код

    @Override
public void onWindowFocusChanged(boolean hasFocus) {
    if(hasFocus) {
    slide_dock.layout(slide_dock.getLeft(), phone_height - 70, slide_dock.getRight(), phone_height + 230);
    }
}

Проблема в том, что это работает только в НЕКОТОРЫХ случаях. Я отлаживал его, и я считаю, что проблема в том, что значения макета slide_dock изменяются после завершения моей функции onWindowFocusChanged, я просто не уверен, где. Может ли кто-нибудь здесь помочь мне? Или связать меня где-нибудь, что объясняет процесс макета в глубине? Я искал вокруг безрезультатно.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2011

Итак, я выяснил причину проблемы выше и выкладываю ее здесь на случай, если кто-нибудь столкнется с такой же проблемой.

Причина, по которой ImageView изменил размеры, заключалась в том, что в функции onViewMeasure ImageView он изменяет свой размер, если не думает, что он уместится на экране. Вы можете просмотреть источник ImageView здесь и посмотреть, как он работает: http://www.google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/widget/ImageView.java&d=3

Чтобы обойти это, я создал собственное представление, которое расширило ImageView и переопределило метод onMeasure. В моем новом методе onMeasure я просто вызвал setDimension, чтобы дать моему новому представлению размеры, которые я хотел, чтобы это имело место, это фактически остановило изменение размера представления, как это было раньше

    @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(measureWidth(widthMeasureSpec), 300);

}
0 голосов
/ 11 февраля 2011

Вы пробовали использовать фреймворк Animation? Используйте RelativeLayout и выровняйте свое дочернее представление к основанию родителя. Затем используйте следующую анимацию, возможно, отображая и скрывая ваш вид соответствующим образом с помощью View.setVisibility(int)

View myView = View(this);

TranslateAnimation slideUp = new TranslateAnimation(myView.getHeight(), 0, 0, 0);
slideUp.setDuration(250);    // millis
slideUp.setFillAfter(true);  // Required for animation to "stick" when done
myView.startAnimation(slideUp);

Возможно, вам придется поиграться с параметрами конструктора TranslateAnimation, чтобы заставить его работать правильно (это из головы).

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