像SurfaceView中的时钟指针一样在固定点旋转位图

时间:2016-02-15 10:28:57

标签: android bitmap 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. SurfaceView, draw image and reduce size, rotate image

  2. Android: How to rotate a bitmap on a center point

  3. How to rotate a bitmap in Android about images center smoothly without oscillatory movement

2 个答案:

答案 0 :(得分:3)

我找到了答案。让pxpy成为canvas上的任意点。 bitmap.getWidth()/2是位图宽度的中间点。它可以是x cordinate的任何一点。对于y cordinate,我将其视为10angleRotation是根据需要的角度。

所以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);

以上代码满足我的要求。请根据您的需要进行修改。

答案 1 :(得分:0)

我用它来旋转我的位图。

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