2014-02-16 3 views
1

В моем приложении у меня есть активность, в которой есть 9 кнопок и 1 textView. Я использую OnTouchListener, чтобы изменить текст в textView, когда я двигаю пальцем по кнопкам.Изменить textView при перемещении пальца по кнопкам

Это то, что моя деятельность выглядит следующим образом:

Вот мой Java код:

button1.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 1"); 
      return false; 
     } 
    }); 
    button2.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 2"); 
      return false; 
     } 
    }); 
    button3.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 3"); 
      return false; 
     } 
    }); 
    button4.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 4"); 
      return false; 
     } 
    }); 
    button5.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 5"); 
      return false; 
     } 
    }); 
    button6.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 6"); 
      return false; 
     } 
    }); 
    button7.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 7"); 
      return false; 
     } 
    }); 
    button8.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 8"); 
      return false; 
     } 
    }); 
    button9.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      textView.setText("Button 9"); 
      return false; 
     } 
    }); 

Но проблема с этим кодом является то, что он только получает OnTouchListener из первых Я коснулся кнопки. Простыми словами, когда я двигаю пальцем, кнопка, которую я коснулся, сначала меняет textView, пока остальные кнопки этого не делают.
Я искал в сети и stackoverflow также, и я наткнулся на что-то вроде MotionEvent.ACTION_MOVE, но я не знаю, как его использовать, и я не уверен, применим ли он в этом случае.
Пожалуйста, помогите мне решить эту проблему! Спасибо за ваше время.

+0

в качестве примечания стороны, должны ли они все не сказать 'return true;' – Doomsknight

+0

@Doomsknight Я не испытываю развития android. Не могли бы вы объяснить, какая разница? –

+0

Предполагается, что прослушиватели на прикосновении возвратят true или false, в зависимости от того, «они» уничтожают событие. Что они делают. Я не думаю, что это имеет какое-то значение, если честно. – Doomsknight

ответ

0

Это не будет работать в Android. Если основной вид не использует первое событие (ACTION_DOWN), возвращая true, любые другие события, которые происходят за его пределами, будут обрабатываться только родительским представлением. Если он потребляет событие - все события до ACTION_UP, и сам он будет доставлен в этот вид.

Если вы хотите реализовать такое поведение, вам необходимо обработать все события в пределах одного представления или переопределить метод dispatchTouchEvent родительского представления, чтобы определить ваше собственное поведение в этом случае.

+0

Спасибо! Не могли бы вы объяснить свое решение примером? –

0

вы можете использовать переключатель случай:

// 
button1.setOnTouchListener(this); 
button2.setOnTouchListener(this); 
button3.setOnTouchListener(this); 
button4.setOnTouchListener(this); 
button5.setOnTouchListener(this); 
} 

@Override 
     public boolean onTouch(View v, MotionEvent event) { 
switch(v.getID()) 
{ 
case(R.id.btn1): 
{ 
textView.setText("Button 1"); 
break; 

} 
case(R.id.btn2): 
{ 
textView.setText("Button 2"); 
break; 
} 
case(R.id.btn3): 
{ 
textView.setText("Button 3"); 
break; 
} 
case(R.id.btn4): 
{ 
textView.setText("Button4"); 
break; 
} 
case(R.id.btn5): 
{ 
textView.setText("Button 5"); 
break; 

default: // bla 
}   

return true; 
     } 
+0

не работает .... –

0

вы можете использовать setOnClickListener или кожух переключателя для делать то, что вы хотите либо вы можете implements OnTouchListener на вашей деятельности и использовать ACTION_UP

Я делаю первый метод для вас здесь

button1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      textView.setText("Button 1");   

     } 
    }); 

button2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      textView.setText("Button 2");   

     } 
    }); 

вы можете продолжать с этим ...

Смежные вопросы