0

次のコードは、テスト アプリで、surfaceView を拡張するクラスで使用される実際のコードです。

@Override
public void onDraw(Canvas canvas)
{       
    canvas.drawCircle(touched_x, touched_y, 50, myPaint);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    touched_x = event.getX();
    touched_y = event.getY();  
    return true;    
}

それは基本的にあなたの指が行くところを描きます。追跡するかどうかをテストします。

2 本目の指を追加しても、最初の指を追跡できます。しかし、3番目を追加すると、停止します。そこから何をしても構いません。すべての指を離してやり直さない限り、追跡されません。

1 本の指を 3 本と見なすことがあるからです。指の間のこのテスト距離を克服することはできますが、それでも問題は解決しません。

薬指が当たるとトラッキングがフリーズします。action.Cancel は呼び出されません。

人差し指がいつどこで離されるかを知ることが重要です。

ただし、最後のイベントは だったと考えられMotionEvent.ACTION_MOVEます。または。MotionEvent.ACTION_UP_MotionEvent.ACTION_CANCEL

現在、1 本の指が 3 本になる可能性があるためです。私のアプリは、特定の画像スクロールの読み込みに失敗したように見えます。

4

1 に答える 1

0

あなたのコードをもっと投稿してください。問題はありません。場合によっては、ビューを無効にするのを忘れていたり、間違いがあるのではないでしょうか? 私の完全なコードがあり、動作します:

float x1 = -100, y1;

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    canvas.drawColor(Color.WHITE);

    paint.setColor(Color.RED);
    canvas.drawCircle(x1, y1, 30, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    x1 = event.getX();
    y1 = event.getY();

    invalidate();
    return true;
}

デバイスにバグがあるかもしれませんが、その可能性は低いです..

于 2012-05-29T10:01:22.263 に答える