У меня есть изображение, которое содержит изображение со стрелкой. Когда пользователь касается пальцем изображения, затем в зависимости от движения изображения из исходного положения я вычисляю угол (угловое смещение).
Изначально я тестирую этот код на эмуляторе, поэтому, когда я щелкаю мышью на изображении, поворачиваю изображение и удаляю мышь, я обнаруживаю, что функция для вычисления угла вызывается несколько раз. 1003 *
Я хочу, чтобы он вызывался ровно один раз, в зависимости от того, когда пользователь поворачивает изображение и оставляет палец.
Вот мой код: -
Обратите внимание, что mTop - это мой просмотр изображений в приведенном ниже коде.
public boolean onTouch(View v, MotionEvent motion) {
// TODO Auto-generated method stub
if (motion.getAction() != MotionEvent.ACTION_DOWN &&
motion.getAction() != MotionEvent.ACTION_MOVE) {
return false;
}
// int angle = 0;
switch(motion.getAction())
{
case MotionEvent.ACTION_MOVE:
float dy = -( motion.getY()-mTop.getPivotY());
float dx = -(motion.getX()-mTop.getPivotX());
double r = Math.atan2(dy, dx);
int angle = (int)Math.toDegrees(r);
updateRotation(angle);
break;
}
return true;
}
public void updateRotation(double angle)
{
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
String filePath = null;
Matrix mtx = new Matrix();
// Log.w(this.getClass().getName(),"The ANGLE IS %f",angle);
// Log.d("ANGLE IS ", Double.toString(angle));
Log.d(this.getClass().getName(), "Value: " + Double.toString(angle));
if(angle > 90)
angle = 90;
mtx.postRotate((float) angle);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
Drawable draw =new BitmapDrawable(bitmap);
mTop.setBackgroundDrawable(draw);
}
=============================================== =====
МОЙ модифицированный код на событии Ontouch: -
switch(motion.getActionMasked())
{
case MotionEvent.ACTION_MOVE:
Log.w(this.getClass().getName(),"In MOTION MOVE");
dy = -( motion.getY()-mTop.getPivotY());
dx = -(motion.getX()-mTop.getPivotX());
r = Math.atan2(dy, dx);
break;
case MotionEvent.ACTION_UP:
angle = (int)Math.toDegrees(r);
updateRotation(angle);
break;
default:
break;
}