有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在按下按钮时显示一条消息,在松开按钮时显示另一条消息。安卓

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

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。它并没有一直这样


共 (1) 个答案

  1. # 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;
                    }
                }
            });
        }
    }