在我的应用中,我有一个活动,其中有9个按钮和1个textView
。当我在按钮上移动手指时,我正在使用OnTouchListener
来更改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 :(得分:0)
这在Android中不起作用。如果基础View不通过返回true消耗第一个事件(ACTION_DOWN),则在其外部发生的任何其他事件将仅由父视图处理。如果它消耗事件 - 所有事件直到ACTION_UP并且它本身将被传递到此视图。
如果要实现此类行为,则需要在单个View中处理所有事件,或者覆盖父View的dispatchTouchEvent方法以在此情况下定义自己的行为。
答案 1 :(得分: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;
}
答案 2 :(得分: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");
}
});
你可以继续这个......