質問

私は、非常に正確な動きの測定が必要なAndroidアプリを書いています。理想的には、ユーザーが画面に指を持って1ピクセルを移動している場合は、追跡できます。現在、私はユーザーがどこにいるかを追跡するためにOntouchをオーバーライドしています。問題は、指が画面上を速く動くと、オントゥーチが動きで15pxも見逃していることです。これを行うためのより正確な方法はありますか?

これは私が現在していることの例です。

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

ありがとう。

役に立ちましたか?

解決

私たちは同じ問題を抱えており、それ以上の精度を得ることができませんでした。フレームワークがピクセルごとの動きを提供するかどうかはわかりません。ただし、ユーザーがより遅い速度で正確な動きをしている場合、これはより正確になる傾向があります。したがって、ユーザーが指を下にして文字通り1つのピクセルを移動する場合、そのイベントを取得する必要があります。ただし、800ピクセルをすばやくスワイプした場合、800のイベントを期待しないでください。

他のヒント

Getx&Gety:Historical Touchイベントよりも少し正確です。これはSDK8 Upから機能すると確信していますが、下位バージョンでテストしていません。

    @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);
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top