在 SurfaceView 中像时钟指针一样在固定点旋转位图
Rotate bitmap in fixed point like a clock hand in SurfaceView
我在 drawable
文件夹中有一张时钟指针的图像。我想像时钟指针一样在固定点旋转它。我尝试了下面的代码,它围绕一个固定点以圆形路径旋转指针,但不像时钟指针那样。
Matrix matrix = new Matrix();
matrix.reset();
matrix.preTranslate(0, 0);
matrix.postRotate(angleRotation, -0, -0);
matrix.postTranslate(240, 480);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bitmap, matrix, null);
我费了好几个小时才把它整理好。任何帮助将不胜感激。
我已尝试通过以下链接寻求帮助,但没有成功。
SurfaceView, draw image and reduce size, rotate image
Android: How to rotate a bitmap on a center point
How to rotate a bitmap in Android about images center smoothly without oscillatory movement
我用它来旋转我的位图。
private Bitmap rotateImage(Bitmap src,int degrees) {
Matrix matrix = new Matrix();
matrix.postRotate(degrees);
return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}
我找到了答案。设 px
和 py
为 canvas
上的任意一点。 bitmap.getWidth()/2
是沿位图宽度的中点。它可以是 x cordinate
的任意点。对于 y cordinate
,我将其视为 10
。 angleRotation
是根据需要的角度。
所以matrix.postTranslate(-bitmap.getWidth()/2, -10);
是旋转点。
下面是代码。
Matrix matrix = new Matrix();
matrix.reset();
Paint paint = new Paint();
float px = 240;
float py = 480;
matrix.postTranslate(-bitmap.getWidth()/2, -10);
matrix.postRotate(angleRotation);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, paint);
以上代码满足我的要求。请根据您的需要进行修改。
我在 drawable
文件夹中有一张时钟指针的图像。我想像时钟指针一样在固定点旋转它。我尝试了下面的代码,它围绕一个固定点以圆形路径旋转指针,但不像时钟指针那样。
Matrix matrix = new Matrix();
matrix.reset();
matrix.preTranslate(0, 0);
matrix.postRotate(angleRotation, -0, -0);
matrix.postTranslate(240, 480);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bitmap, matrix, null);
我费了好几个小时才把它整理好。任何帮助将不胜感激。
我已尝试通过以下链接寻求帮助,但没有成功。
SurfaceView, draw image and reduce size, rotate image
Android: How to rotate a bitmap on a center point
How to rotate a bitmap in Android about images center smoothly without oscillatory movement
我用它来旋转我的位图。
private Bitmap rotateImage(Bitmap src,int degrees) {
Matrix matrix = new Matrix();
matrix.postRotate(degrees);
return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}
我找到了答案。设 px
和 py
为 canvas
上的任意一点。 bitmap.getWidth()/2
是沿位图宽度的中点。它可以是 x cordinate
的任意点。对于 y cordinate
,我将其视为 10
。 angleRotation
是根据需要的角度。
所以matrix.postTranslate(-bitmap.getWidth()/2, -10);
是旋转点。
下面是代码。
Matrix matrix = new Matrix();
matrix.reset();
Paint paint = new Paint();
float px = 240;
float py = 480;
matrix.postTranslate(-bitmap.getWidth()/2, -10);
matrix.postRotate(angleRotation);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, paint);
以上代码满足我的要求。请根据您的需要进行修改。