У меня есть активность с RelativeLayout
и частный класс, который расширяет SimpleOnScaleGestureListener
. В методе onScale
слушателя я хотел бы увеличить/уменьшить весь макет (все, что видит пользователь) с помощью пользователя, распространяющего/зажимающего его пальцы.
Я бы хотел, чтобы изменения в макете не были постоянными, т.е. когда жест распространения/пинча закончился, я бы хотел, чтобы макет возвращался к тому, на чем он был на первом месте (любой сброс может быть выполнен в onScaleEnd
метод SimpleOnScaleGestureListener
, например).
Я попытался реализовать его, вызвав setScaleX
и setScaleY
на RelativeLayout
, а также с помощью ScaleAnimation
. Не было также и плавного масштабирования (или всего, что можно было бы назвать масштабированием). Возможно ли даже увеличение/уменьшение a RelativeLayout
?
Единственная идея, которую я оставил, - это прочитать скриншот из кеша и поместить его как ImageView
поверх всего макета и увеличить/уменьшить изображение с помощью setImageMatrix
. Однако я не знаю, как это реализовать.
Май макет также содержит контейнер для фрагмента, который пуст во время, когда предполагается масштабирование. В жесте onScaleEnd
фрагмент помещается в контейнер (уже реализованный и работающий нормально). Вот мой макет:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_pinch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
<!-- Layout containing the thumbnail ImageViews -->
<LinearLayout
android:id="@+id/thumbnail_group_pui"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c1"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c2"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c3"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c4"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c5"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c6"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tn_c7"/>
</LinearLayout>
<!-- Layout containing the dashed boxes -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="152dp"
android:layout_centerVertical="true"
android:orientation="horizontal" >
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
<ImageView
android:layout_width="177dp"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:background="@drawable/dashed_box"/>
</LinearLayout>
<!-- Container for the fragments -->
<FrameLayout
android:id="@+id/fragment_container_pui"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
ИЗМЕНИТЬ
Я нашел эти две связанные темы:
Расширение RelativeLayout и переопределение dispatchDraw() для создания масштабируемой ViewGroup
Увеличить содержимое в RelativeLayout
Однако я не реализовал реализацию. Какие другие методы я должен включить в расширенный класс для фактического масштабирования макета или reset it?