【问题标题】:Android ontouchlistener counter implementationAndroid ontouchlistener 计数器实现
【发布时间】:2023-03-24 12:35:02
【问题描述】:

我已经设置了 ontouch 监听器来为我的 imagebutton 实现一个计数器。但我只能检测到按钮被触摸并释放。只要按下按钮,我不确定如何实现递增以及释放后如何停止它。以下是我的代码:

up.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
       if (event.getAction()==MotionEvent.ACTION_DOWN) {
        pressdown();
    }
       else if (event.getAction()==MotionEvent.ACTION_UP) {
        pressrelease();
    }
       return true;
    }

【问题讨论】:

  • 添加给出持续时间的变量。刚刚在这里回答了一个类似的问题stackoverflow.com/questions/23793345/…
  • 谢谢,但只要按下按钮,我就会尝试增加一个值。不计算按下/释放的时间。
  • 知道了,在这种情况下,您可以使用在 ACTION_DOWN 中为您计数的处理程序启动一个单独的线程,并使用该处理程序停止线程以处理增加的值。有很多方法可以做到这一点,但仅此而已。对不起,我最初误解了你的帖子。
  • 谢谢。我对线程和处理程序一无所知。您能否将我引向已经实现此功能的任何示例,或者您能否给我一个此示例的伪代码?如果是,您可以“回答”我的问题。

标签: android multithreading ontouchlistener


【解决方案1】:

好的。这是我自己的问题的解决方案。它可能会帮助其他人。

使用 Handler 对象,因为您必须实现一个单独的线程来进行递增/递减

       public class MainActivity extends Activity{

       private boolean autoIncrement = false;
       private boolean autoDecrement = false;
       private final long REPEAT_DELAY = 50;
       private Handler repeatUpdateHandler = new Handler();


       @Override
        protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.input);


        class RepetitiveUpdater implements Runnable{

         @Override
         public void run() {
         if (autoIncrement) {
         increment();
             repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
        }
         else if(autoDecrement){
         decrement();
             repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
        }
    }

     }
                up.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            increment();
         }
         });

                up.setOnLongClickListener(new OnLongClickListener() {

          @Override
          public boolean onLongClick(View v) {
          autoIncrement = true;
          repeatUpdateHandler.post(new RepetitiveUpdater());
          return false;
            }
            });

                up.setOnTouchListener(new OnTouchListener() {                                                          
                   @Override
           public boolean onTouch(View v, MotionEvent event) {
                    if(event.getAction()==MotionEvent.ACTION_UP && autoIncrement ){
                autoIncrement = false;
                     } 
         return false;
          }
        });

               public void increment(){
       if (i<100) {
           i++;
           TextView no = (TextView)findViewById(R.id.no);
       no.setText(String.valueOf(i));
    }

}

    }

减量也一样。

礼貌:Github,作者:Jeffrey F. Cole

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多