У меня есть активность с RelativeLayout
и частный класс в нем, который расширяет SimpleOnScaleGestureListener
, В методе onScale
слушателя я хотел бы увеличивать/уменьшать масштаб всего макета (все, что видит пользователь), когда пользователь раздвигает/сжимает пальцы.
Я бы хотел, чтобы изменения в макете НЕ были постоянными, т.е.когда жест расширения/щипка закончен, я бы хотел, чтобы макет вернулся к тому, что было в первую очередь (любой сброс может быть выполнен в методе onScaleEnd
класса SimpleOnScaleGestureListener
для пример).
Я попытался реализовать это, вызвав setScaleX
и setScaleY
в RelativeLayout
, а также с помощью ScaleAnimation
. Ни один из них не привел к плавному масштабированию (или к чему-либо, что вообще можно было бы назвать масштабированием). Можно ли вообще увеличить/уменьшить масштаб RelativeLayout
?
Единственная идея, которая у меня осталась, это прочитать снимок экрана из кеша и поместить его как ImageView
поверх всего макета, а также увеличивать/уменьшать масштаб этого изображения с помощью setImageMatrix
. Однако я понятия не имею, как это реализовать.
Макет также может содержать контейнер для фрагмента, который пуст в то время, когда предполагается возможность масштабирования. В жесте onScaleEnd
фрагмент помещается в контейнер (уже реализовано и работает нормально). Вот мой макет:
РЕДАКТИРОВАТЬ
Я нашел две связанные темы:
Расширение RelativeLayout и переопределение dispatchDraw() для создания масштабируемой ViewGroup
Масштабирование содержимого в RelativeLayout
Однако реализации я не получил. Какие еще методы мне нужно включить в расширенный класс, чтобы масштабировать макет или сбросить его?