使用setRotate重新缩放imageview

时间:2014-05-18 16:20:57

标签: android matrix rotation imageview scale

我正在使用以下代码来旋转图像视图:

Matrix matrix=new Matrix();
matrix.setRotate((float) angle,main_needle.getWidth()/2, (float)(main_needle.getHeight()/1.1787));
main_needle.setImageMatrix(matrix);

问题是此代码还重新调整了imageview。我尝试将setScale添加到我的代码中,但它没有帮助。

Matrix matrix=new Matrix();
matrix.setRotate((float) angle,main_needle.getWidth()/2, (float)(main_needle.getHeight()/1.1787));     
matrix.setScale(main_needle.getWidth(), main_needle.getHeight());
main_needle.setImageMatrix(matrix); 

我根据对此的评论更新了代码:

Matrix matrix=new Matrix();
matrix.setRotate((float) angle,main_needle.getWidth()/2, (float)(main_needle.getHeight()/1.1787));
matrix.setScale((int)(main_needle.getWidth()/Math.cos((double)angle)),(int)( main_needle.getHeight()/Math.sin((double)angle)));
main_needle.setScaleType(ScaleType.MATRIX);  
main_needle.setImageMatrix(matrix);

但是这段代码只会使imageview消失

我使用的最简单的修复是缩小photoshop中的图像,使像素与dp匹配,例如,在xd中以70dp乘100dp设置的图像应使用70 x 100的可绘制像素。感谢所有人的响应。< / p>

1 个答案:

答案 0 :(得分:2)

你需要使用matrix.postRotate();这个必须

Matrix matrix=new Matrix(); 
main_needle.setScaleType(ScaleType.MATRIX);
matrix.postRotate((float) i,main_needle.getWidth()/2, (float)(main_needle.getHeight()/1.1787)); 
main_needle.setImageMatrix(matrix);

实际上这是因为您尝试以线性布局旋转视图。这将导致其专用空间扩大或缩小。

创意1:尝试使用框架布局并且您的视图在那里旋转想法2:尝试自定义视图子类并在onDraw中绘制您的转盘。在互联网上寻找开始的指南针绘图示例。