Android:当视图改变方向时切换高度和宽度

Posted

技术标签:

【中文标题】Android:当视图改变方向时切换高度和宽度【英文标题】:Android: Switch Height and Width when View change orientation 【发布时间】:2022-01-10 06:27:42 【问题描述】:

我确实使用 PhotoView 库来放大缩小。 现在,当用户单击一个按钮时,我准备旋转 PhotoView,高度和宽度会旋转。 所以宽度小于屏幕高度。 这导致在旋转 Imageview 之前我无法像往常一样获得全屏缩放。

所以任何使旋转后的新宽度或高度成为全屏的解决方案。

示例:这是缩放图像,它不会像旋转之前那样放大整个屏幕

【问题讨论】:

您能展示一下您是如何旋转图像的吗?它是库中的方法还是 View 类中的方法? 【参考方案1】:

我必须在我的项目中使用相同类型的功能,这是我的设计和实现。

基本的XML照片视图设计

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity">

    <com.github.chrisbanes.photoview.PhotoView
        android:id="@+id/image_main"
        android:layout_
        android:scaleType="centerCrop"
        android:layout_
        android:src="@drawable/gull_portrait_ca_usa"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <ImageView
        android:id="@+id/image_rotate"
        android:src="@android:drawable/ic_menu_rotate"
        android:layout_margin="16dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_
        android:layout_/>

</androidx.constraintlayout.widget.ConstraintLayout>

然后我只更新方向onClick 事件。

class MainActivity : AppCompatActivity() 
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.imageRotate.setOnClickListener 
            binding.imageMain.rotation = binding.imageMain.rotation+90
        

    

Output

【讨论】:

【参考方案2】:

您需要创建 2 个 xml 布局。纵向(您已经在 res > layout 文件夹中创建的那个)和横向(在 res > layout-land 内)。

当你旋转手机时,fragment 会加载 layout-land 文件夹中的 xml 文件。

您可以在这里找到教程:https://www.geeksforgeeks.org/how-to-create-landscape-layout-in-android-studio/

更多信息在这里:https://developer.android.com/guide/topics/resources/providing-resources

【讨论】:

我不是在旋转手机,而是使用 imageview.rotateby() 旋转图像视图本身; 我点击旋转图像,这样它会旋转图像视图本身而不是手机,所以当图像旋转时,高度和宽度将被切换,高度将与旧宽度相同【参考方案3】:

如果图像将被旋转,它将根据他的纵横比在屏幕上进行调整。如果你想让它适合全屏,图像会变硬,看起来不太好。如果您仍然想这样做,只需在“图像资源”的位置使用图像作为“背景”,并将视图长度和宽度保持为“匹配父级”。

参见下面的示例视图:

<ImageView
    android:id="@+id/mainImageID"
    android:layout_
    android:layout_
    android:background="@drawable/yourImage"/>

【讨论】:

我在用毕加索

以上是关于Android:当视图改变方向时切换高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章

删除图像视图周围的空白

改变View的高度和宽度Android的正确方法

如何在xml中设置复合可绘制文本视图的高度和宽度? [关闭]

切换方向时如何使 UIView 自动调整为全屏

当方向改变时,在 UIWebView 中查找横向和纵向的图像位置

在 Android 中,如何设置 ListView 项的高度和宽度?