在固定点中旋转位图,就像 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);

我正在努力解决它几个小时。任何帮助将不胜感激。

我也尝试过下面的链接寻求帮助,但没有成功。

  1. 表面视图,绘制图像并减小大小,旋转图像

  2. 安卓:如何在中心点上旋转位图

  3. 如何在Android中平滑地旋转有关图像中心的位图,而无需振荡运动

我找到了答案。让pxpy成为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);

上面的代码满足我的要求。请根据您的需要修改它。

我用它来旋转我的位图。

 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);
}

最新更新