gpt4 book ai didi

Android:通过拖动图像的特定部分来旋转图像

转载 作者:太空狗 更新时间:2023-10-29 13:10:12 27 4
gpt4 key购买 nike

我有这个ImageView:

enter image description here

我需要能够旋转整个图像(圆圈和两个“30”圆圈)当我拖动外面的圆圈时。只有当我从“30”圈外开始拖动时它才应该旋转

它们都应该围绕中心点旋转。

当我使用 View.OnTouchListener 将它拖动到它的任何部分并通过计算触摸事件坐标和轴心点之间的角度,然后旋转 ImageView 。

如何检测运动事件何时仅在外圈内,以防止在大圈内拖动时图像旋转?

最佳答案

OnTouchListeneronTouchEvent 方法中,您可以利用 ACTION_DOWN 事件来检查 TouchEvent 是否在小外圈内开始。如果为真,则将 bool 值设置为真。在 ACTION_MOVE 事件中,您只需检查 bool 值,并且仅在将其设置为 true 时才旋转。然后,使用 ACTION_UP ACTION_CANCEL 再次将 bool 值设置为 false。

@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
boolean rightPosition = false;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// When the event is in the little circles rightPosition=true
break;
case MotionEvent.ACTION_MOVE:
if(rightPosition) yourRotationCode();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
rightPosition = false;
}
return false;
}

你怎么知道拖动是否从小圆圈开始?

Tl;dr:跟踪小圆圈的极坐标并将它们与 ACTION_DOWN 事件的坐标进行比较。

要确定,如果 ACTION_DOWN 事件发生在小圆圈内,跟踪角度,您的 ImageView 从它的“零位置”旋转。一开始,小圆圈位于 45° 和 125°。根据 ImageView 的当前旋转偏移它们,获取 12 点钟和 ACTION_DOWN 事件之间的角度并比较它们。还要考虑旋转点和事件之间的距离。由于您已经计算出所需的旋转,我想您知道如何确定这些角度。
到旋转点的正确距离应该根据 ImageView 的高度和宽度来计算,这样您就可以保持密度独立。这需要一些像素计数和计算比率,基于原始图像资源,手工完成。然后可以将该比率硬编码为常数值。
由于 TouchEvent 的位置精确到一个像素,您应该在计算出的小圆圈中心周围添加一些偏移量。我建议在小圆圈周围画一个正方形。它的边长必须再次根据 ImageView 的高度和宽度来计算。同样,您可以手动确定“有效区域”与 ImageView 大小的比率,并将其作为常量提供。然后你只需要检查起点的坐标是否在小圆圈中心的 +/-(边长/2)范围内。

关于Android:通过拖动图像的特定部分来旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42066341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com