getX() 和 getY() 的值错误,当通过捏合而不是活动旋转视图时



这就是我要做的。

我有一个相机视图,用户可以执行一些过程(缩放移动旋转(

我需要当用户捕获图像时将其放在相机盒的同一位置,并在相机视图上应用处理

我这样做如下

mCameraView是相机视图,mCaptureImage是预览图像

float x = mCameraView.getX();
float y = mCameraView.getY();
mCaptureImage.setX(x);
mCaptureImage.setY(y);
float angel = mCameraView.getRotation();
mCaptureImage.setRotation(angel);
float scaleX, scaleY;
scaleX = mCameraView.getScaleX();
scaleY = mCameraView.getScaleY();
mCaptureImage.setScaleX(scaleX);
mCaptureImage.setScaleY(scaleY);

如果用户不旋转框

,一切都很好但是,如果用户旋转框,我得到的 x,y 值错误,我不知道为什么会发生这种情况并且图像跳转到未指定的位置

我进行了调试,发现旋转视图时 x,y 值发生了变化

这是XML的代码

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/selfie_move_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<com.otaliastudios.cameraview.CameraView
android:id="@+id/selfie_camera_view"
android:layout_width="300dp"
android:layout_height="200dp"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="gone"
app:cameraCropOutput="true"
app:cameraPlaySounds="false" />
<ImageView
android:id="@+id/selfie_capture_image"
android:layout_width="300dp"
android:layout_height="200dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:visibility="gone" />
</FrameLayout>

关于旋转视图

的示例谁能帮我解决这个问题?

屏幕的旋转将构成配置更改,这将更改"当前可用的屏幕大小"。为避免这种情况,您必须使用configChanges属性自行处理配置更改并指定一个值。

听起来您应该使用"屏幕大小"和"方向"值。这将导致您的活动收到对onConfigurationChanged()的调用,而不是重新创建活动。

警告: 自行处理配置更改可能会使使用备用资源变得更加困难,因为系统不会自动为您应用这些资源。当您必须避免由于配置更改而重新启动时,应将此技术视为最后的手段,并且不建议用于大多数应用程序。

有关处理配置更改的详细信息:https://developer.android.com/guide/topics/resources/runtime-changes

详细了解configChange属性:https://developer.android.com/guide/topics/manifest/activity-element#config

最新更新