围绕另一张图片的中心旋转图片

3
我已经按照以下链接的方法,围绕一个中心旋转了一个拨号盘:

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. 希望能通过矩阵旋转相同的任何帮助

这应该会有所帮助:https://dev59.com/NWgv5IYBdhLWcg3wW_h_#10664055 - Ron
@userSeven7s,很抱歉,但我似乎无法弄清楚它如何有所帮助:( 对不起。 - Preethi
旋转后添加图像快照。 - Ron
@userSeven7s:嗯,这个标志只是围绕自己的中心旋转,而不是背景图像的中心。 - Preethi
你确定从res中加载的图片中的 logo 是完美居中的吗? - Ron
是的,它可以在其中心旋转。 - Preethi
1个回答

2

尝试仅使用peopleOrg的宽度和高度进行旋转。

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

更新:

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

使用正弦和余弦函数来获取虚拟圆周上的点,以绘制您的标志视图。

此帖子将帮助您进行计算:如何计算圆周上的点?


我最初使用了translateX,后来改用dialerWidth。根据我的理解,在矩阵操作中,您首先需要平移要旋转的点,然后将其设置回来。我最初只进行了预平移,但在http://groups.google.com/group/android-developers/browse_thread/thread/a3050b5902af33b7中读到必须同时进行两个操作。 - Preethi
甚至只需调用setIMageMatrix即可。无需创建位图,只需将位图设置到图像视图中并设置矩阵即可。 - Ron
抱歉回复晚了。我尝试了提到的更新,但图像仍然围绕其自身中心点旋转,而不是围绕一个点旋转。 - Preethi
1
你应该实际计算你的标志视图的左上角点并移动它,然后只需旋转标志。使用sin/cos函数获取圆周上给定度数的点以绘制你的视图。 - Ron
1
使用正弦函数并不难,但是找出需要的参数和计算方法会花费一些时间。很抱歉我看不到其他的解决办法。 - Ron
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接