2011-11-28 4 views
4

매우 정확한 움직임 측정이 필요한 Android 앱을 작성 중입니다. 사용자가 손가락을 화면에 대고 하나의 픽셀을 이동하면 추적 할 수있는 것이 가장 이상적입니다. 현재, 사용자 위치를 추적하기 위해 onTouch를 재정의하고 있습니다. 문제는 손가락이 화면에서 빠르게 움직일 때 터치에서 터치가 15px만큼 빠지는 것입니다. 이 작업을 수행하는 더 정확한 방법이 onTouch입니까?안드로이드에서 픽셀 단위로 움직임을 추적하십시오.

@Override 
public boolean onTouch(View view, MotionEvent event){ 
    if(event.getAction() == MotionEvent.ACTION_MOVE){ 
     Log.d(TAG, event.getX() + ", " + event.getY(); 
    } 
} 

감사 :

내가 현재 뭐하는 거지의 예입니다.

+0

정확히 달성하려는 것은 무엇입니까? 첫 번째와 마지막 직책이 선을 그 으려는 노력을 했습니까? 아니면 그냥 자유 그리기입니까? – MrZander

답변

2

우리는 같은 문제가 있었고 더 이상의 정밀도를 얻을 수 없었습니다. 프레임 워크가 픽셀 단위로 움직이는 것을 확신하지 못합니다. 그러나 사용자가 더 느린 속도로 정확한 움직임을 만들 때 이것은보다 정확 해지는 경향이 있습니다. 따라서 사용자가 손가락을 내려 문자 그대로 한 픽셀을 움직이는 경우 해당 이벤트를 가져와야합니다. 그러나 800 픽셀을 빠르게 스 와이프하면 800 개의 이벤트가 발생하지 않습니다.

+0

이 아이디어 나 아이디어를 얻는 방법을 언급하지 않으셨습니까? 느린 움직임을 추적하고 싶습니까? – UMAR

3

여기에 좀 더 정확한 단지 getX & getY 이상입니다 : 역사적 터치 이벤트. 나는 이것이 SDK8에서 작동한다고 확신하지만 더 낮은 버전에서 테스트하지는 않았다.

@Override public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getAction(); 
     mCurDown = action == MotionEvent.ACTION_DOWN 
       || action == MotionEvent.ACTION_MOVE; 
     int N = event.getHistorySize(); 
     for (int i=0; i<N; i++) { 
      drawPoint(event.getHistoricalX(i), event.getHistoricalY(i), 
        event.getHistoricalPressure(i), 
        event.getHistoricalSize(i)); 
     } 
     drawPoint(event.getX(), event.getY(), event.getPressure(), 
       event.getSize()); 
     return true; 
    } 

    private void drawPoint(float x, float y, float pressure, float size) { 
     mCurX = (int)x; 
     mCurY = (int)y; 
     mCurPressure = pressure; 
     mCurSize = size; 
     mCurWidth = (int)(mCurSize*(getWidth()/3)); 
     if (mCurWidth < 1) mCurWidth = 1; 
     if (mCurDown && mBitmap != null) { 
      int pressureLevel = (int)(mCurPressure*255); 
      mPaint.setARGB(pressureLevel, 255, 255, 255); 
      mCanvas.drawCircle(mCurX, mCurY, mCurWidth, mPaint); 
      mRect.set(mCurX-mCurWidth-2, mCurY-mCurWidth-2, 
        mCurX+mCurWidth+2, mCurY+mCurWidth+2); 
      invalidate(mRect); 
     } 
    } 
+0

이전보다 많은 점수를 얻었지만 모든 점수를 얻지는 못했습니다! –

관련 문제