2016-05-01 9 views
1

なぜ、View.OnTouchListener()は、1をインクリメントするように頼んだら、それほど気にならないのですか?離散OnTouchListenerイベント

public class Clicker extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.clicker); 
     TextView t = (TextView) findViewById(R.id.counter); 
     ImageView v = (ImageView) findViewById(R.id.image); 
     if (v != null) { 

      v.setOnTouchListener(new View.OnTouchListener() { 
       int count = 3123; 
       @Override 
       public boolean onTouch(View arg0, MotionEvent me) { 
        v.setSelected(me.getAction()== MotionEvent.ACTION_DOWN); 
        count = count + 1; 
        t.setText(String.format("%d",count)); 
        return true; 
       } 
      }); 
     } 
    } 
} 

enter image description here 1クリックずつ2又は3ポイント。

+1

onTouchが – Krish

答えて

1

onTouchメソッドは、ACTION_DOWN、ACTION_MOVE、ACTION_UPなどのさまざまなタッチイベントに対して呼び出されます。ボタンをクリックするだけで、このメソッドは2回、ダウンプレスのために1回、指が離されるたびに1回呼び出されます。

v.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN){ 
      count += 1; 
     } 
     return true; 
    } 
}); 
+0

うん、ありがとう、チャンピオン! –

1

方法:

onTouch(View arg0, MotionEvent me)

は、すべてのタッチイベントのために呼ばれています。クリックすると、MotionEvent.ACTION_DOWNMotionEvent.ACTION_UPの2つのイベントが表示されます。指を動かすと、MotionEvent.ACTION_MOVEも受信できます。

+0

どのように、私はMotionEvent.ACTION_DOWNをキャッチすることができます。.. action_upなど、ACtion_downのような複数回呼び出します。ボタンが押されたとき、あなたはこのような何かを書く必要があるでしょう一度だけカウントするためにのみ? –

+1

タッチイベントリスナーは、タッチイベントごとに呼び出されます。おそらく、あなたが必要とするものに対して、OnClickListenerが良いでしょう。または、メソッドによって渡されたアクションがACTION_DOWNであるかどうかをテストするifステートメントを作成できます。 – elvisrusu