我有一个 RelativeLayout
的活动,其中有一个私人课程,它扩展了 SimpleOnScaleGestureListener
。在监听器的 onScale
方法中,我想放大/缩小整个布局(用户看到的所有内容),用户张开/捏住他的手指。
我希望对布局的更改不是永久性的,即当展开/收缩手势结束时,我希望布局回到最初的状态(任何重置都可以在 onScaleEnd
例如 SimpleOnScaleGestureListener
—的方法)。
I’ve tried to implement it via calling setScaleX
and setScaleY
on the RelativeLayout
and also by using a ScaleAnimation
.两者都没有导致平滑缩放(或任何可以称为缩放的东西)。甚至可以放大/缩小 RelativeLayout
吗?
我剩下的唯一想法是从缓存中读取屏幕截图并将其作为 ImageView
放在整个布局的顶部,并通过 setImageMatrix
放大/缩小该图像。但是,我不知道如何实现它。
May 布局还包含一个片段容器,在应该可以进行缩放时它是空的。在 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
但是,我没有得到实施。我必须在扩展类中包含哪些其他方法才能实际缩放布局或重置布局?
原文由 Schnodahipfe 发布,翻译遵循 CC BY-SA 4.0 许可协议
因此,我创建了
RelativeLayout
的子类,如上述主题所述。它看起来像这样:我对
SimpleOnScaleGestureListener
的实现如下所示:希望这可以帮助!
更新:
您可以使用
OnPinchListener
为您的ZoomableRelativelayout
集成 ---ScaleGestureDetector
:并且您需要将 Zoomable 布局的触摸监听器与 ScaleGestureDetector 的触摸监听器绑定: