按下按钮时显示一条消息,松开按钮时显示另一条消息.安卓系统



我只是想编写一个简单的代码,当按下按钮时显示一条消息,当释放按钮时显示另一条消息。我试了一下,但没用:

btnOn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
mmHandler.postDelayed(mAction1, 10);
break;
case MotionEvent.ACTION_UP:
mmHandler.removeCallbacksAndMessages(null);
mmHandler.postDelayed(mAction1, 10);
txtdebug.setText("Message  2");
break;
}
return true;
}
Runnable mAction1 = new Runnable() {
@Override
public void run() {
txtdebug.setText("Message 1");
//mHandler.postDelayed(this, 100);
}
};

了解removeCallbacksAndMessages不起作用的原因。例如,当我释放时,它显示Message 2,但随后它再次显示message 1。它并没有一直这样。

我不知道我是否正确理解你,但如果你想在按下按钮时每X毫秒执行一次功能,然后当用户释放按钮停止它时,你可以这样做(你非常接近这个解决方案,但你在UP事件中再次运行Hendler(:

public class MainActivity extends AppCompatActivity
{
Button btnOn;
Handler handler;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOn = findViewById(R.id.btnOn);
handler = new Handler();
final Runnable action = new Runnable()
{
@Override
public void run()
{
Log.d("MyTag", "Run action");
handler.postDelayed(this, 100); // Run action every 100 ms
}
};
btnOn.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.d("MyTag", "Down");
handler.postDelayed(action, 10);
return true;
case MotionEvent.ACTION_UP:
Log.d("MyTag", "Up");
handler.removeCallbacksAndMessages(null);
return true;
default:
return false;
}
}
});
}
}

相关内容

最新更新