2013-05-06 82 views
0

我正在尝试制作一个成功实现的可重新触摸的视图。你可以找到代码How to make view resizable on touch event从角度获取新的积分Android

它有4个角落。你可以通过拖拽一个角来重新调整矩形的大小。但是现在我想增强这个逻辑并且想要在那个代码中放置旋转。当用户触摸矩形边缘之一的中心时,我成功找到角度。但现在的问题是,我无法获得角落的新位置,因此我可以重绘该矩形并且可以旋转。

问题是:如何根据角度计算4个角的新位置?

回答

0

如果知道旋转的角度,则不需要计算矩形的顶点。 一个简单的方法来做到这将是如下

@Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      canvas.save(); 
      canvas.rotate(60.0f); 

      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.STROKE); 

      canvas.drawRect(10, 10, 100, 100, paint); 
      canvas.restore(); 
     } 
+0

我知道这个场景是为了旋转画布,但是之后点在他们的旧地方。下次我无法在画布上找到4个角落点的新位置。这对我的朋友不起作用。 – 2013-05-06 11:32:48

0

我的理解,你要计算基于旋转角度的新坐标......这可能是简单的比你想:

x' = x × (cosα - sinα) 
y' = y × sinα × cosα 

因此,您只需以编程方式应用此项,考虑x'x的旋转结果,而y'y的旋转结果相同,并且α是旋转角度。

cosαsinα功能在Java中可作为Math.cos(α)Math.sin(α),但要注意:在Java中,所有三角函数使用弧度而不是度的角度,这样你就可以这样考虑: rad = deg * 180/π 适用为:

double deg = 45d; //Put instead your degrees 
double rad = deg/180 * Math.PI; //The radians convertion