简体   繁体   English

Android ontouchlistener计数器实现

[英]Android ontouchlistener counter implementation

I have set ontouch listener to implement a counter for my imagebutton. 我已经设置了ontouch监听器来为我的imagebutton实现一个计数器。 But I can only detect button being touched and release. 但是我只能检测到按钮被触摸并释放。 I am not sure how to implement incrementing as long as the button is pressed and how to stop it after it is released. 我不确定只要按下按钮就如何执行递增操作,释放按钮后如何停止递增操作。 Following is the code I have: 以下是我的代码:

up.setOnTouchListener(new OnTouchListener() { 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;
    }

Ok. 好。 Here's a solution to my own question. 这是我自己的问题的解决方案。 It might help someone else. 它可能会帮助别人。

use a Handler object because you have to implement a separate thread for incrementing/decrementing 使用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));
    }

}

    }

Do the same for decrement. 递减相同。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM