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

Android 围绕另一个图像的中心旋转图像,android,matrix,rotation,Android,Matrix,Rotation,我已通过下面的链接将一个刻度盘绕其中心旋转: 现在我有一个图标旁边的拨号器,我需要旋转它周围的拨号器,随着拨号器在一个循环的路径 private void rotateLogo(float degrees){ Matrix nMatrix = new Matrix(); Bitmap peopleOrg = BitmapFactory.decodeResource(getResources(), R.drawable.

我已通过下面的链接将一个刻度盘绕其中心旋转:

现在我有一个图标旁边的拨号器,我需要旋转它周围的拨号器,随着拨号器在一个循环的路径

    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);                  
    }
这只会导致图像围绕自己的中心旋转,而不是围绕拨号器的中心点旋转。 我不知道我错在哪里:(

更新
  • 我基本上需要的标志在一个循环路径移动,并成为一个可点击的看法
  • 尝试使用rotateAnim,但视图没有动画,并且我在获取onclick事件时遇到问题
  • 想要任何可以使用矩阵旋转的帮助吗

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

    nMatrix.postRotate(degrees, peopleOrg.getWidth()/2, peopleOrg.getHeight()/2);
    
    更新: 既然您让我知道您的徽标应该是可单击的视图,那么将徽标图像与拨号器合并是不适用的。要围绕拨号器的中心旋转徽标视图,您应该实际计算徽标视图的(顶部,左侧)点并移动它,而不仅仅是旋转它

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


    这篇文章将帮助你进行计算:

    这应该会有帮助:@userSeven7s很抱歉,但我似乎不知道这会有什么帮助:(Sorry在旋转后添加图像快照。@userSeven7s:嗯,徽标只是围绕自己的中心旋转,而不是背景图像的中心旋转。.您确定徽标完全位于从res加载的图像的中心吗?我最初使用translateX,后来改为dialerWidth,这与我在矩阵运算中的理解一致,您首先使用translateX解析你需要旋转的点,然后将其设置回原位。我最初只做了预转换,但读入这两项都必须完成。即使只调用
    setIMageMatrix
    也应该可以。无需创建位图。只需将位图设置为图像视图并设置矩阵。很抱歉,回复太晚。我尝试了上述更新,但图像仍然无效till围绕自己的中心点旋转,而不是围绕某个点旋转。你应该实际计算徽标视图的左上角点并移动它,然后旋转徽标。使用sin/cos函数以给定角度获取圆周长上的点以绘制视图。使用sin函数并不难,但要计算要做的参数和计算是。所以这需要一些时间。对不起,我看不到其他方法。