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);
}
这只会导致图像围绕自己的中心旋转,而不是围绕拨号器的中心点旋转。
我不知道我错在哪里:(
更新
尝试仅使用
peopleOrg
宽度和高度旋转
nMatrix.postRotate(degrees, peopleOrg.getWidth()/2, peopleOrg.getHeight()/2);
更新:
既然您让我知道您的徽标应该是可单击的视图,那么将徽标图像与拨号器合并是不适用的。要围绕拨号器的中心旋转徽标视图,您应该实际计算徽标视图的(顶部,左侧)点并移动它,而不仅仅是旋转它
使用sine
和cosine
函数获取虚拟圆圆周上的点,用于绘制徽标视图。
这篇文章将帮助你进行计算:这应该会有帮助:@userSeven7s很抱歉,但我似乎不知道这会有什么帮助:(Sorry在旋转后添加图像快照。@userSeven7s:嗯,徽标只是围绕自己的中心旋转,而不是背景图像的中心旋转。.您确定徽标完全位于从res加载的图像的中心吗?我最初使用translateX,后来改为dialerWidth,这与我在矩阵运算中的理解一致,您首先使用translateX解析你需要旋转的点,然后将其设置回原位。我最初只做了预转换,但读入这两项都必须完成。即使只调用
setIMageMatrix
也应该可以。无需创建位图。只需将位图设置为图像视图并设置矩阵。很抱歉,回复太晚。我尝试了上述更新,但图像仍然无效till围绕自己的中心点旋转,而不是围绕某个点旋转。你应该实际计算徽标视图的左上角点并移动它,然后旋转徽标。使用sin/cos函数以给定角度获取圆周长上的点以绘制视图。使用sin函数并不难,但要计算要做的参数和计算是。所以这需要一些时间。对不起,我看不到其他方法。