setRotation 改变ImageView的位置
setRotation change the ImageView position
在下面的代码中,我试图用 imageView
替换标签,保持不变 [宽度、高度、TranslateX、TranslateY 和旋转]把它给 imageView
:
transX = selectedSticker.getTransX();
transY = selectedSticker.getTransY();
rotation = selectedSticker.getCurrentAngle();
ImageView mHoverView = findViewById(R.id.drawingView);
mHoverView.setLayoutParams(new FrameLayout.LayoutParams((int) stickerWidth, (int) stickerHeight));
mHoverView.setTranslationX(transX);
mHoverView.setTranslationY(transY);
mHoverView.setRotation(rotation);
mHoverView.setImageResource(R.drawable.dog);
mHoverView.setBackgroundColor(Color.BLUE);
当我点击 REPLACE 按钮将贴纸替换为 imageView
时,一切正常,问题开始了 当我旋转 贴纸并单击 REPLACE 按钮时,imageView
与贴纸旋转相同,但它设置在错误的位置(imageView 没有围绕它的中心旋转):
例如
无旋转:
旋转:
也许,您必须通过重新计算与View的变换兼容的变换矩阵来获得正确的平移值。
//mHoverView.setTranslationX(transX);
//mHoverView.setTranslationY(transY);
Matrix m = new Matrix();
m.setTranslate(transX, transY);
m.postRotate(rotation);
float[] offset = { 0.0F, 0.0F };
m.mapPoints(offset);
mHoverView.setTranslationX(offset[0]);
mHoverView.setTranslationY(offset[1]);
问题是我没有设置 PivotX
和 PivotY
所以视图不会围绕中心旋转,这里是完整代码:
float[] values = new float[9];
selectedSticker.getMatrix().getValues(values);
float dx = values[2];
float dy = values[5];
mHoverView.setPivotX(0.0f);
mHoverView.setPivotY(0.0f);
mHoverView.setTranslationX(dx);
mHoverView.setTranslationY(dy);
mHoverView.setRotation(rotation);
mHoverView.invalidate();
在下面的代码中,我试图用 imageView
替换标签,保持不变 [宽度、高度、TranslateX、TranslateY 和旋转]把它给 imageView
:
transX = selectedSticker.getTransX();
transY = selectedSticker.getTransY();
rotation = selectedSticker.getCurrentAngle();
ImageView mHoverView = findViewById(R.id.drawingView);
mHoverView.setLayoutParams(new FrameLayout.LayoutParams((int) stickerWidth, (int) stickerHeight));
mHoverView.setTranslationX(transX);
mHoverView.setTranslationY(transY);
mHoverView.setRotation(rotation);
mHoverView.setImageResource(R.drawable.dog);
mHoverView.setBackgroundColor(Color.BLUE);
当我点击 REPLACE 按钮将贴纸替换为 imageView
时,一切正常,问题开始了 当我旋转 贴纸并单击 REPLACE 按钮时,imageView
与贴纸旋转相同,但它设置在错误的位置(imageView 没有围绕它的中心旋转):
例如
无旋转:
旋转:
也许,您必须通过重新计算与View的变换兼容的变换矩阵来获得正确的平移值。
//mHoverView.setTranslationX(transX);
//mHoverView.setTranslationY(transY);
Matrix m = new Matrix();
m.setTranslate(transX, transY);
m.postRotate(rotation);
float[] offset = { 0.0F, 0.0F };
m.mapPoints(offset);
mHoverView.setTranslationX(offset[0]);
mHoverView.setTranslationY(offset[1]);
问题是我没有设置 PivotX
和 PivotY
所以视图不会围绕中心旋转,这里是完整代码:
float[] values = new float[9];
selectedSticker.getMatrix().getValues(values);
float dx = values[2];
float dy = values[5];
mHoverView.setPivotX(0.0f);
mHoverView.setPivotY(0.0f);
mHoverView.setTranslationX(dx);
mHoverView.setTranslationY(dy);
mHoverView.setRotation(rotation);
mHoverView.invalidate();