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

5
我使用PhotoView库进行缩放。 现在当用户点击按钮时,我准备旋转PhotoView,高度和宽度会旋转。 因此,宽度小于屏幕高度。 这导致我无法像旋转ImageView之前那样获得全屏缩放。
有没有解决方案可以使旋转后的新宽度或高度占据整个屏幕。
例如:这是缩放的图像,它不能像旋转之前那样在整个屏幕上缩放。

this is Zoomed Image


2
你能展示一下你是如何旋转图片的吗?这是库中的方法还是View类中的方法? - cmak
3个回答

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_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.github.chrisbanes.photoview.PhotoView
        android:id="@+id/image_main"
        android:layout_width="0dp"
        android:scaleType="centerCrop"
        android:layout_height="400dp"
        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_width="40dp"
        android:layout_height="40dp"/>

</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


0
如果图像将被旋转,它会根据其纵横比在屏幕上进行调整。如果您想将其适应于全屏幕,则图像将被拉伸,看起来并不好。如果仍然想要这样做,只需将图像用作“背景”,而不是“图像资源”,并将视图长度和宽度保持为“match parent”。
请参阅下面的示例视图:
<ImageView
    android:id="@+id/mainImageID"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/yourImage"/>

我正在使用Picasso。 - MiniDev99

0

我没有旋转手机,而是使用“imageview.rotateby()”来旋转图像视图本身。 - MiniDev99
我点击旋转图像按钮,以便旋转ImageView本身而不是手机,这样当图像旋转时,高度和宽度会交换,并且高度将与旧宽度相同。 - MiniDev99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接