繁体   English   中英

如何使用onTouchListener从同一按钮执行两项不同的任务

[英]How to use an onTouchListener to do two different tasks from the same button

我试图使两个按钮在点击时会改变一个值的加减1,并在按住该按钮的同时每秒不断地加减1十次。 当按下按钮或按住按钮时,我可以获得要更改的值,但是我无法获得想要的行为。 这是我所拥有的:

btPlus.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                setTempo(mTempo + 1);
                mTempo=mTempo+1;
                tvTempo.setText(Integer.toString(mTempo));
                return true;
            }
            return false;
        }
    });
    btMinus.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                setTempo(mTempo - 1);
                mTempo=mTempo-1;
                tvTempo.setText(Integer.toString(mTempo));
                return true;
            }
            return false;
        }
    });
    btPlus.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            int action = motionEvent.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    timer = new Timer();
                    timer.scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
                            if (getActivity() == null)
                                return;
                            getActivity().runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    tvTempo.setText(Integer.toString(mTempo));
                                    mTempo++;
                                    if (mTempo > 300)
                                        mTempo = 300;
                                }
                            });
                        }
                    }, 100, 100);
                    break;
                case MotionEvent.ACTION_UP:
                    timer.cancel();
            }
            return true;
        }
    });
    btMinus.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            int action = motionEvent.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    timer = new Timer();
                    timer.scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
                            if (getActivity() == null)
                                return;
                            getActivity().runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    tvTempo.setText(Integer.toString(mTempo));
                                    mTempo--;
                                    if (mTempo < 1)
                                        mTempo = 1;
                                }
                            });
                        }
                    }, 100, 100);
                    break;
                case MotionEvent.ACTION_UP:
                    timer.cancel();
            }
            return true;
        }
    });
    return rootView;
}

谢谢你的帮助!

您可以实现onKeyListener来确定按钮的按住时间,如以下示例所示:

Android长按活动

或使用onLongClickListener执行与常规“点击”不同的功能,例如:

长按删除项目

暂无
暂无

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

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