我正在尝试制作一个成功实现的可重新触摸的视图。你可以找到代码How to make view resizable on touch event。从角度获取新的积分Android
它有4个角落。你可以通过拖拽一个角来重新调整矩形的大小。但是现在我想增强这个逻辑并且想要在那个代码中放置旋转。当用户触摸矩形边缘之一的中心时,我成功找到角度。但现在的问题是,我无法获得角落的新位置,因此我可以重绘该矩形并且可以旋转。
问题是:如何根据角度计算4个角的新位置?。
我正在尝试制作一个成功实现的可重新触摸的视图。你可以找到代码How to make view resizable on touch event。从角度获取新的积分Android
它有4个角落。你可以通过拖拽一个角来重新调整矩形的大小。但是现在我想增强这个逻辑并且想要在那个代码中放置旋转。当用户触摸矩形边缘之一的中心时,我成功找到角度。但现在的问题是,我无法获得角落的新位置,因此我可以重绘该矩形并且可以旋转。
问题是:如何根据角度计算4个角的新位置?。
如果知道旋转的角度,则不需要计算矩形的顶点。 一个简单的方法来做到这将是如下
@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();
}
我的理解,你要计算基于旋转角度的新坐标......这可能是简单的比你想:
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
我知道这个场景是为了旋转画布,但是之后点在他们的旧地方。下次我无法在画布上找到4个角落点的新位置。这对我的朋友不起作用。 – 2013-05-06 11:32:48