我需要在我正在开发的应用程序上创建一个指南针.所以我试图创建一个名为CompassView的新视图,它基本上扩展了imageview,显示了一个位于东西南北面的位图,使用传感器来查找手机所指向的程度,并相应地旋转图像,以便创建一个实际的指南针但问题是如果我尝试将图像旋转到45度的某个角度,它会缩小.这里有一些图片可以更好地解释.
正如你所看到的那样,当我尝试围绕45旋转时,第二个图像被缩小.我想要做的是这样的:
这是我目前使用的代码:
Bitmap bMap = BitmapFactory.decodeResource(getResources(),R.drawable.compass); Matrix xMatrix = new Matrix(); xMatrix.reset(); xMatrix.postRotate(360-mValue,75,75); //This is 75 because 150 is the image width Bitmap bMapRotate = Bitmap.createBitmap(bMap,bMap.getWidth(),bMap.getHeight(),xMatrix,true); setImageBitmap(bMapRotate);
任何帮助将不胜感激.谢谢
编辑:(解决方案)
我终于得到了工作,感谢接受的答案.这是我正在为任何想要知道如何工作的人使用的代码:
RotateAnimation rAnimAntiClockWise = new RotateAnimation( 360 - mValue,360 - event.values[0],Animation.RELATIVE_TO_SELF,0.5f,0.5f); //mValue is the angle in degrees and i subtracted it from 360 to make it anticlockwise,and event.values[0] is the same thing as mValue rAnimAntiClockWise.setFillAfter(true); rAnimAntiClockWise.setInterpolator(new LinearInterpolator()); rAnimAntiClockWise.setDuration(0); startAnimation(rAnimAntiClockWise);
解决方法
你可以使用一个替代的技巧,它将像旋转一样工作,不会调整图像的大小.我实际上以45度角旋转图像,并在动画后保持变化.
rAnimAntiClockWise = new RotateAnimation(0.0f,45.0f,0.5f); rAnimAntiClockWise.setFillAfter(true); rAnimAntiClockWise.setInterpolator(new LinearInterpolator()); bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.rotate); rAnimAntiClockWise.setDuration(100); img_rotate.startAnimation(rAnimAntiClockWise);