Continuously increase integer value as the button is pressed

后端 未结 9 1289
长情又很酷
长情又很酷 2020-12-04 11:10

I\'m new to Android so sorry if the question is easy to answer. I have two buttons, a decrease and an increase button, and in the middle of them a TextView which displays a

9条回答
  •  执念已碎
    2020-12-04 11:29

    For that to work, you need a thread that will update the integer value when you long press on a button.

    Create a handler in your activity:

    private Handler repeatUpdateHandler = new Handler();
    

    And 2 vars which will state: is it increment or decrement? Only one set at a time.

    private boolean mAutoIncrement = false;
    private boolean mAutoDecrement = false;
    

    And the present number value

    public int mValue;
    

    And a class that will run in another thread:

    class RptUpdater implements Runnable {
        public void run() {
            if( mAutoIncrement ){
                increment();
                repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY );
            } else if( mAutoDecrement ){
                decrement();
                repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY );
            }
        }
    }
    

    Add a long press listener to your button:

    mBTIncrement.setOnLongClickListener( 
                new View.OnLongClickListener(){
                    public boolean onLongClick(View arg0) {
                        mAutoIncrement = true;
                        repeatUpdateHandler.post( new RptUpdater() );
                        return false;
                    }
                }
        );   
    
    mBTIncrement.setOnTouchListener( new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) 
                        && mAutoIncrement ){
                    mAutoIncrement = false;
                }
                return false;
            }
        });  
    

    In the above case the button is the increment one. Create another button which will set mAutoDecrement to true.

    And decrement() will be a function, which will set your instance int variable like this:

    public void decrement(){
        mValue--;
        _value.setText( ""+mValue );
    }
    

    You figure the increment out. Oh and REP_DELAY is a static int variable set to 50.

    I see this is an excerpt from Jeffrey Cole's open source NumberPicker available at http://www.technologichron.net/ Proper author's attribution must be added.

提交回复
热议问题