在按钮上移动手指时更改 textView
Posted
技术标签:
【中文标题】在按钮上移动手指时更改 textView【英文标题】:Change textView while moving finger across buttons 【发布时间】:2014-03-15 20:32:12 【问题描述】:在我的应用程序中,我有一个活动,其中有 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
,而其余按钮则不会。 我也在网上和 *** 上搜索,我遇到了类似 @ 987654328@ 但我不知道如何使用它,我不确定它是否适用于这种情况。 请帮我解决这个问题!谢谢你的时间。
【问题讨论】:
作为旁注,他们都应该不说return true;
@Doomsknight 我没有安卓开发经验。你能解释一下它会有什么不同吗?
触摸监听器应该返回真或假,这取决于他们是否“消费”事件。他们做什么。老实说,我认为这没有什么区别。
【参考方案1】:
你可以使用setOnClickListener
或 switch case 来做任何你想做的事情
或者你可以在你的活动上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");
);
你可以继续这个...
【讨论】:
【参考方案2】:您可以使用开关盒:
//
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;
【讨论】:
【参考方案3】:这不适用于 android。如果底层 View 没有通过返回 true 来消耗第一个事件 (ACTION_DOWN),则在它之外发生的任何其他事件将仅由父 View 处理。如果它消耗事件 - 直到 ACTION_UP 之前的所有事件,它本身都将被传递到此视图。
如果你想实现这样的行为,你需要在单个 View 中处理所有事件,或者重写父 View 的 dispatchTouchEvent 方法来定义你自己在这种情况下的行为。
【讨论】:
谢谢!你能用一个例子解释你的解决方案吗?以上是关于在按钮上移动手指时更改 textView的主要内容,如果未能解决你的问题,请参考以下文章