围绕另一个图像的中心旋转图像

时间:2012-06-19 11:16:30

标签: android matrix rotation

我已使用以下链接中的旋钮绕其中心旋转了一个表盘:

http://mobile.tutsplus.com/tutorials/android/android-sdk-creating-a-rotating-dialer/

现在我在拨号器旁边有一个图标,我需要围绕拨号器旋转它,以及拨号器在圆形路径中旋转。

    private void rotateLogo(float degrees){
                 Matrix nMatrix = new Matrix();
                 Bitmap peopleOrg = BitmapFactory.decodeResource(getResources(), R.drawable.peoplelogo);
                 float translateX = dialerWidth / 2 - dialerWidth / 2;
                 float translateY = dialerHeight / 2 - dialerWidth / 2;
                 nMatrix.preTranslate(-turntable.getWidth()/2, -turntable.getHeight()/2);
                 nMatrix.postRotate(degrees, translateX, translateY);
                 nMatrix.postTranslate(turntable.getWidth()/2, turntable.getHeight()/2); 
                 Bitmap peopleScale = Bitmap.createBitmap(peopleOrg, 0, 0, peopleOrg.getWidth(), peopleOrg.getHeight(), nMatrix, true);
                 peopleLogo.setImageBitmap(peopleScale);        
                 peopleLogo.setImageMatrix(nMatrix);                  
    }

这只会使图像围绕其自身的中心旋转,而不是围绕拨号器的中心点旋转。 我无法找出错误的地方:(

更新

  1. 我基本上需要徽标在圆形路径中移动并且是可点击的视图。
  2. 尝试使用rotateAnim,但视图没有动画,我无法获得onclick事件。
  3. 希望任何可以使用矩阵旋转相同的帮助

1 个答案:

答案 0 :(得分:2)

请尝试仅使用peopleOrg宽度和高度旋转。

nMatrix.postRotate(degrees, peopleOrg.getWidth()/2, peopleOrg.getHeight()/2);

更新:

现在您告诉我您的徽标应该是可点击的视图,将徽标图像与拨号器合并不适用。要围绕拨号器中心旋转徽标视图,您应该实际计算徽标视图的(顶部,左侧)点并移动它,而不仅仅是旋转它。

使用sinecosine函数获取虚拟圆周上的点,以绘制徽标视图。

这篇文章将帮助您进行计算:How do I calculate a point on a circle’s circumference?