2013-02-18 56 views
2

我正在开发一个Android应用程序,我想知道是否可以检测一个轴固定的运动方向。例如,我想将手机放在桌子上,并在移动时检测方向(左,右,上和下)。距离没有必要,我只想知道准确的方向。触摸即使我的代码总是在右侧的位置

谢谢!

我的代码是:

arg1.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View arg0, MotionEvent event) { 

        float startX = 0; 
        float startY; 
        float endX; 
        float endY; 
        switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         startX = (int) event.getX(); 
         startY = (int) event.getY(); 
         System.out.println("startX" + startX); 
         System.out.println("startY" + startY); 
         break; 
        case MotionEvent.ACTION_MOVE: 

         endX = event.getX(); 
         endY = (int) event.getY(); 
         System.out.println("endX" + endX); 
         System.out.println("endY" + endY); 
         float sub = endX - startX; 
         System.out.println("sub" + sub); 
         if ((endX - startX) < 100) { 
          arg0.setBackgroundColor(Color.GREEN); 

         } 
         if ((endX - startX) > 100) { 
          try { 
           TextView ph_tv = (TextView) arg0 
             .findViewById(R.id.textnum); 
           String Pho_no = ph_tv.getText().toString(); 
           arg0.setBackgroundColor(Color.RED); 
           Intent intent = new Intent(
             Intent.ACTION_CALL, Uri 
               .parse("tel:" + Pho_no)); 
           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
           startActivity(intent); 
           lv.setBackgroundColor(Color.BLACK); 

          } catch (ActivityNotFoundException e) { 
           Toast.makeText(
             getApplicationContext(), 
             "Error in your phone call" 
               + e.getMessage(), 
             Toast.LENGTH_LONG).show(); 

          } 
          section(path_name, lv1); 

         } 
         break; 

        case MotionEvent.ACTION_UP: 
         endX = (int) event.getX(); 
         endY = (int) event.getY(); 
        } 
        return true; 
       } 

      }); 
+0

你想要什么还不清楚。您最好听取加速度计检测运动。你为什么要做触摸事件? – Leonidos 2013-02-18 11:11:45

回答

1
private final int mDragInterwell = 5; 

private Point mStartPoint; 

private final 

@Override 
public boolean onTouch(View arg0, MotionEvent event) { 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     mStartPoint = new Point(event.getX(), event.getY()); 
     break; 
    case MotionEvent.ACTION_MOVE: 

     final Point current = new Point(event.getX(), event.getY()); 
     Log.d(getClass().getName(), decideMovement(current)); 
     break; 

    case MotionEvent.ACTION_UP: 
     break; 
    } 
    return true; 
} 

private String decideMovement(final Point point) 
{ 
    String direction = "invalid"; 
    boolean changed = false; 
    if((mStartPoint.x - point.x) > mDragInterwell) 
    { 
     direction = "left"; 
     changed = true; 
    }else if( (mStartPoint.x - point.x) > -mDragInterwell ) 
    { 
     changed = true; 
     direction = "right"; 
    }else if( (mStartPoint.y - point.y) > mDragInterwell ) 
    { 
     changed = true; 
     direction = "down"; 
    }else if( (mStartPoint.y - point.y) > -mDragInterwell ) 
    { 
     changed = true; 
     direction = "up"; 
    } 
    if(changed) 
    { 
     mStartPoint = point; 
    } 
    return direction; 
} 

希望这将有助于..

+0

thanx bro ......... – 2013-02-18 15:28:34

2

如果你想检测我认为使用onTouchListener您的情况下手指运动方向是不是一个很好的解决方案。我建议你使用手势听众 这对于例如左,右

class MyGestureDetector extends SimpleOnGestureListener { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
        return false; 
       // right to left swipe 
       if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show(); 
       } 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 

    } 

你可以计算y离

做同样为向上和向下如果您对我的回答或任何其他问题如果你觉得我的回答不够清楚,请随时在评论中留下问题:)

我希望我的回答能帮助你!

+0

thanx亲爱的,,,,,,,,, – 2013-02-18 15:29:30

+0

@ user2068608不客气! – 2013-02-19 03:55:34