0

健全性チェックが必要です。

ビュー内で ACTION_DOWN が発生した場合、そのビューの onTouch は、接触点がビューを離れても ACTION_MOVE イベントを取得し続けます (!!!)。

同様に、ACTION_DOWN がビューの外にある場合、そのタッチがビューの領域に移動しても、何も受信しません。

これは、ACTION_DOWN がそのタッチ イベントとビューとの最初の関連付けを確立し、タッチ座標がどこにローミングしても、その関連付けがビューの存続期間中に変更されないことを示唆しています。なぜそれが良いアイデアなのか想像できないので、オプションか不完全な初期化か何かだと思っています。

これが私の onTouch です。座標を LogCat に表示する以外に特別なことはありません。

public boolean  onTouch(View v,MotionEvent event) {

    boolean bExitValue = true;
    float   fX;
    float   fY;
    int     iAction;

    iAction = event.getActionMasked();

    if (MotionEvent.ACTION_MOVE == iAction) {
        fX = event.getRawX();
        fY = event.getRawY();
        Log.d("",("X: " + fX + ", Y: " + fY));
    }

    else if (MotionEvent.ACTION_DOWN != iAction) {
        bExitValue = false;
    }

    return(bExitValue);

}

(はい、ローカル フロートを使用しない方が効率的であることはわかっています。これを使用して実験しているので、他のテストの副産物です。)

これは意図的な動作ですか?MotionEvents が、ユーザーが触れている場所でさえないビューに報告されるのは、本当に奇妙に思えます。これは、X/Y がビューの境界内にあることをコードが毎回手動で確認する必要があることを意味します。あれは正しいですか?

ありがとう!

4

1 に答える 1

0

これは、すべての ui ツールキットがどのように機能するかです。たとえば、win32/linux/whatever を使用して、Web ブラウザーのスクロールバーでマウスを押し、まだ押されているときにマウスをスクロールバー領域の外に移動します。マウスをブラウザー ウィンドウの外に移動することもできます。マウスを動かすと、ブラウザがコンテンツをスクロールします。

于 2013-05-21T20:51:20.540 に答える