Вращающийся на 90 градусов FrameLayout, содержащий веб-просмотр в Android - PullRequest
4 голосов
/ 25 января 2012

Я пытаюсь повернуть структуру кадра, содержащую веб-просмотр в Android, вот мой код:

FrameLayout contentView = (FrameLayout) getRootView().findViewById(
                R.id.content);

FrameLayout backGround = new FrameLayout(getContext());

FrameLayout.LayoutParams bgfl = new FrameLayout.LayoutParams(
    FrameLayout.LayoutParams.FILL_PARENT,
    FrameLayout.LayoutParams.FILL_PARENT);

backGround.addView(WebView object);

contentView.addView(backGround, bgfl);

RotateAnimation r = new RotateAnimation(0f, -90f,Animation.RELATIVE_TO_SELF,0.5f, 

Animation.RELATIVE_TO_SELF,0.5f);

r.setDuration(0);

r.setFillAfter(true); 

LayoutAnimationController animController = new LayoutAnimationController(r, 0);

backGround.setLayoutAnimation(animController);

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

Любое предложение о том, как решить эту проблему

1 Ответ

0 голосов
/ 19 февраля 2012

У меня были похожие проблемы с возможностью активировать часть пользовательского интерфейса во время работы анимации, хотя там «ничего» нет. RotateAnimation, который вы используете, обновляет только визуальные элементы вида, все элементы FrameLayout s остаются неизменными в своих исходных местоположениях.

Одна из возможностей - создать отдельный макет для вашего FrameLayout, настроенный так, чтобы он выглядел как вид после поворота. Этот макет может быть создан в вашем Activity путем реализации Animation.AnimationListener и помещения кода экземпляра в метод onAnimationEnd(Animation).

Исходя из значения setDuration(int), равного 0, похоже, что вам вообще может не понадобиться видеть анимированный вид. В этом случае вы можете просто заменить код, который запускает ваш LayoutAnimation, на код, который заменяет макет.

...