Android 在整个屏幕上旋转图像

Android 在整个屏幕上旋转图像,android,animation,rotation,Android,Animation,Rotation,我似乎无法在整个屏幕上正确旋转图像。问题是,当图像旋转时,您可以在某些区域看到背景。我希望图像在旋转时也能填满屏幕。这是布局图。我尝试过不同的音阶类型,但没有成功 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">

我似乎无法在整个屏幕上正确旋转图像。问题是,当图像旋转时,您可以在某些区域看到背景。我希望图像在旋转时也能填满屏幕。这是布局图。我尝试过不同的音阶类型,但没有成功

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="centerCrop" />
</LinearLayout>

我在
onResume
中启动动画。正如我所说,图像会旋转,但旋转时会有背景区域。我尝试过使用比屏幕大得多的图像,但它仍然不能满足我的需要。我不在乎图像的外部区域不可见。我只想让旋转填满屏幕。我猜
ImageView
最初设置了它的宽度和高度,然后,当它旋转时,它使用这些尺寸。有更好的方法吗?

您正在将ImageView的缩放类型设置为“centerCrop”。不幸的是,关于不同缩放类型的确切含义没有很好的文档,但是名称暗示图像在屏幕上居中,并被裁剪为ImageView的确切大小。因此,当您开始旋转时,您将看到背景区域


尝试将缩放类型更改为“中心”。

您正在将ImageView的缩放类型设置为“中心裁剪”。不幸的是,关于不同缩放类型的确切含义没有很好的文档,但是名称暗示图像在屏幕上居中,并被裁剪为ImageView的确切大小。因此,当您开始旋转时,您将看到背景区域


尝试将scaleType更改为“居中”。

在详细研究了这个问题之后,我认为不可能实现我想要的。如果可能的话,那就太复杂了,不值得去做。

在仔细研究了这个问题之后,我认为不可能实现我想要的。如果可能的话,那就太复杂了,不值得这样做。

你可以:

private var sfRotation=0
私有lateinit变量绑定:ActivityMainBinding
专用var标度=1F
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
binding=DataBindingUtil.setContentView(this,R.layout.activity\u main)
val outMetrics=DisplayMetrics()
windowManager.getDefaultDisplay().getRealMetrics(outMetrics)
val w=outMetrics.widthPixels
val h=outMetrics.heightPixels
比例=如果(w>h)w.toFloat()/h.toFloat()否则h.toFloat()/w.toFloat()
binding.image.scaleX=比例
binding.image.scaleY=scale
}
趣味套装(){
sfRotation=(sfRotation+90)%360
Log.d(“>>>sfRotation”,sfRotation.toString())
Log.d(“>>>hwrotation”,hwrotation.toString())
binding.image.rotation=sfRotation.toFloat()
binding.image.scaleX=比例
binding.image.scaleY=scale
}
您可以:

private var sfRotation=0
私有lateinit变量绑定:ActivityMainBinding
专用var标度=1F
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
binding=DataBindingUtil.setContentView(this,R.layout.activity\u main)
val outMetrics=DisplayMetrics()
windowManager.getDefaultDisplay().getRealMetrics(outMetrics)
val w=outMetrics.widthPixels
val h=outMetrics.heightPixels
比例=如果(w>h)w.toFloat()/h.toFloat()否则h.toFloat()/w.toFloat()
binding.image.scaleX=比例
binding.image.scaleY=scale
}
趣味套装(){
sfRotation=(sfRotation+90)%360
Log.d(“>>>sfRotation”,sfRotation.toString())
Log.d(“>>>hwrotation”,hwrotation.toString())
binding.image.rotation=sfRotation.toFloat()
binding.image.scaleX=比例
binding.image.scaleY=scale
}

我已经尝试了所有ScaleType,但没有成功。我认为ImageView将图像的初始宽度和高度设置为屏幕的宽度和高度,然后,当它旋转时,它不会自动改变图像大小。所以我认为scaleType并不重要。我已经尝试了所有scaleType,但没有成功。我认为ImageView将图像的初始宽度和高度设置为屏幕的宽度和高度,然后,当它旋转时,它不会自动改变图像大小。所以我认为鳞片类型并不重要。
image = (ImageView) findViewById(R.id.image);
image.setBackgroundResource(R.drawable.back_big);
rot = AnimationUtils.loadAnimation(this, R.anim.rotation);
image.startAnimation(rot);