7

私は Android プログラミングと Java にまったく慣れていません (ただし、C# の経験はある程度あるので役に立ちます)。

現時点では、すべてがどのように機能するかを知るために、いくつかのことをいじっています。onTouchListener を実装するアクティビティを作成しました。onTouch をオーバーライドし、event.getAction() をオンにしました。

public boolean onTouch(View v, MotionEvent event) 
{
    float x; 
    float y;    

    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN: // gets called
        {
            x = event.getX();
            y = event.getY();   
            circle c = new circle(this, x, y, 10, 0xFFFFFF);
            _main.addView(c, tapCount++);
            break;
        }
        case MotionEvent.ACTION_MOVE: // doesnt seem to do anything
        {
            x = event.getX();
            y = event.getY();
            circle c = new circle(this, x, y, 10, 0xFFFFFF);
            _main.addView(c, tapCount++);
            break;
        }
    }
    return false;
}

ここで「circle」は円を描くクラスです。

画面上で指をドラッグすると、円の軌跡が表示されると思っていました。代わりに、私が触れ始めたときだけ円が描かれています。

コードを例と比較しました (例: Google によるこのブログ投稿: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html )。間違いが見つかりません。 .

編集: クラス全体へのリンク: http://pastebin.com/tVDQjQhu

編集:修正。onTouch() 関数で true を返す必要があります。ああ!

4

4 に答える 4

45

使用中に同じ問題が発生しMotionEvent.ACTION_MOVEました。が機能するにはMotionEvent.ACTION_MOVE、false ではなく true を返します。

于 2011-06-23T17:17:31.490 に答える
14

私にとっての解決策は

return true

これを使用する必要があるため、 onTouch 関数で

public boolean onTouch(View v, MotionEvent event){
float x; 
float y;    

switch (event.getAction())
{
    case MotionEvent.ACTION_DOWN: // gets called
    {
        x = event.getX();
        y = event.getY();   
        circle c = new circle(this, x, y, 10, 0xFFFFFF);
        _main.addView(c, tapCount++);
        break;
    }
    case MotionEvent.ACTION_MOVE: // doesnt seem to do anything
    {
        x = event.getX();
        y = event.getY();
        circle c = new circle(this, x, y, 10, 0xFFFFFF);
        _main.addView(c, tapCount++);
        break;
    }
}
return true; //the problem was here

}

onTouch(View v, MotionEvent event) から false を返すと、MotionEvent.ACTION_DOWN のみが呼び出されます。したがって、この関数から true を返す必要があります

これが役立つことを願っています

于 2012-07-17T06:02:02.500 に答える
1

同じ問題があり、バグかどうかはわかりませんが、実装に追加OnClickListenerし、実装してからコンストラクターにpublic void onClick(View v)追加することで、なんとか機能しました。setOnClickListener(this)

于 2012-02-14T15:30:26.267 に答える