2014-02-16 43 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,而其餘按鈕則不會。
我在網絡和計算器上搜索,我碰到類似MotionEvent.ACTION_MOVE,但我不知道如何使用它,我不知道它是否適用於這種情況。
請幫我解決這個問題!感謝您的時間。

+0

作爲一個側面說明,他們都不應該說'返回true;' – Doomsknight

+0

@Doomsknight我沒有在android開發經驗。你能解釋一下它會有什麼不同嗎? –

+0

觸摸監聽器應該返回true或false,具體取決於它們是否「消耗」事件。他們做什麼。儘管說實話,我認爲這沒什麼區別。 – Doomsknight

回答

0

這不適用於Android。如果底層View通過返回true不消耗第一個事件(ACTION_DOWN),則任何其他發生在其之外的事件將僅由父View處理。如果它使用事件 - 所有事件直到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");   

     } 
    }); 

你可以繼續這個...