【发布时间】:2015-07-22 00:02:30
【问题描述】:
我有一个 Framelayout,它在运行时添加四个图像视图,并且在中心它包含主图像,用户可以使用它执行不同的操作,但我面临旋转布局视图的问题
目前正在触摸旋转按钮,我正在这样做
public void setRotateListener() {
mRotateImage.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX(0);
float y = event.getY(0);
float theta = getTheta(x, y);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_DOWN:
theta_old = theta;
break;
case MotionEvent.ACTION_MOVE:
float delta_theta = theta - theta_old;
theta_old = theta;
int direction = (delta_theta > 0) ? 1 : -1;
angle += 3 * direction;
Log.d("Tag", "rotate angle : " + obj.getHeight());
obj.setRotation(angle);
notifyListener(direction);
break;
}
return true;
}
});
}
private float getTheta(float x, float y) {
float sx = x - (obj.getWidth() / 2.0f);
float sy = y - (obj.getHeight() / 2.0f);
float length = (float) Math.sqrt(sx * sx + sy * sy);
float nx = sx / length;
float ny = sy / length;
float theta = (float) Math.atan2(ny, nx);
final float rad2deg = (float) (180.0 / Math.PI);
float thetaDeg = theta * rad2deg;
return (thetaDeg < 0) ? thetaDeg + 360.0f : thetaDeg;
}
但我无法获得预期的结果,我也已经参考了此链接 https://github.com/rprouse/XkcdClock 以及尝试用手势和动画旋转,但它似乎无法按照我在屏幕上的移动工作
【问题讨论】:
-
我不知道你想如何旋转以及你当前的问题是什么。
-
从上面的图片你可以看到图片上的旋转按钮实际上这个按钮是动态添加到框架上的,所以我想旋转时钟以及逆时针整个框架布局,所以无论用户动作向哪个方向移动在布局上,整个框架和内部图像也在那个方向上旋转。我目前的问题是它现在不能在任何方向上平滑旋转。@mmlooloo
-
您在此屏幕截图中的框架布局在哪里?它需要整个屏幕还是只占用蓝色方块?你的问题到底是什么?您是否设法旋转但不够平滑?或者你甚至没有任何轮换?
-
是的蓝色框架是框架布局,我可以顺时针旋转,但它不平滑这是主要问题以及当用户在该方向上移动手指时如何逆时针旋转。
-
嗨,您正在规范化 x 和 y 的值,但
Math.atan2不需要规范化。您只需传入该点的坐标,它就会以弧度返回角度。删除规范化代码。现在。如果你将对象的中间作为参考,你应该从给定的点击坐标中减去它们,atan2将返回正确的角度:Math.atan2(y-y1, x-x1);因为,你看,你只需要从枢轴增加坐标就知道了角度。
标签: android rotation imageview android-framelayout ontouch