Android - увеличение/уменьшение масштаба RelativeLayout с помощью расширения/щипка

У меня есть активность с RelativeLayoutи частный класс в нем, который расширяет SimpleOnScaleGestureListener, В методе onScaleслушателя я хотел бы увеличивать/уменьшать масштаб всего макета (все, что видит пользователь), когда пользователь раздвигает/сжимает пальцы.

Я бы хотел, чтобы изменения в макете НЕ были постоянными, т.е.когда жест расширения/щипка закончен, я бы хотел, чтобы макет вернулся к тому, что было в первую очередь (любой сброс может быть выполнен в методе onScaleEndкласса SimpleOnScaleGestureListenerдля пример).

Я попытался реализовать это, вызвав setScaleXи setScaleYв RelativeLayout, а также с помощью ScaleAnimation. Ни один из них не привел к плавному масштабированию (или к чему-либо, что вообще можно было бы назвать масштабированием). Можно ли вообще увеличить/уменьшить масштаб RelativeLayout?

Единственная идея, которая у меня осталась, это прочитать снимок экрана из кеша и поместить его как ImageViewповерх всего макета, а также увеличивать/уменьшать масштаб этого изображения с помощью setImageMatrix. Однако я понятия не имею, как это реализовать.

Макет также может содержать контейнер для фрагмента, который пуст в то время, когда предполагается возможность масштабирования. В жесте onScaleEndфрагмент помещается в контейнер (уже реализовано и работает нормально). Вот мой макет:


   





    

    

    

    

    

    

    







    

   

   

   

   

   

   









РЕДАКТИРОВАТЬ Я нашел две связанные темы:
Расширение RelativeLayout и переопределение dispatchDraw() для создания масштабируемой ViewGroup
Масштабирование содержимого в RelativeLayout

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

34
задан Community 23 May 2017 в 12:34
поделиться