Android 如何对同一个按钮同时使用 OnClick 和长按(3 秒)

标签 android button onclicklistener ontouchlistener

在我的应用程序中,我需要做一些Action A,同时为按钮做正常的click,并且需要在按住同一按钮超过 3 秒的同时执行其他一些Action B。 我试过下面的代码

private boolean isMoved = false;
    final Runnable runr = new Runnable() {

                    @Override
                    public void run() {
                        // Your code to run on long click
                        System.out.println("long pressed for 3 sec");

                    }
                };

                final Handler handel = new Handler();
                contactButton.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View arg0, MotionEvent arg1) {
                        switch (arg1.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            isMoved = false;
                            handel.postDelayed(runr,3000);
                            break;          
                        case MotionEvent.ACTION_MOVE:
                            isMoved = true;

                        case MotionEvent.ACTION_UP:
                            if(!isMoved)
                                System.out.println("button single click");

                        default:
                            handel.removeCallbacks(runr);
                            break;

                        }
                        return true;

                    }
                });

但是它并没有像我期望的那样工作,任何人都请指导我完成这个操作。

最佳答案

所有回答和评论都是真实的。这是你的实现

Button button;
long down,up;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.button);
    button.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()){
                case MotionEvent.ACTION_DOWN :
                    Toast.makeText(MainActivity.this, "Down", Toast.LENGTH_SHORT).show();
                    down=System.currentTimeMillis();
                    break;
                case MotionEvent.ACTION_UP :
                    Toast.makeText(MainActivity.this, "Up", Toast.LENGTH_SHORT).show();
                    up=System.currentTimeMillis();
                    if(up-down>3000)
                        Toast.makeText(MainActivity.this, "More than 3", Toast.LENGTH_SHORT).show();
                    return true;
            }
            return false;
        }
    });
}

关于Android 如何对同一个按钮同时使用 OnClick 和长按(3 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597203/

相关文章:

android - 安装时将图像存储在应用程序数据文件夹中

javascript - 如何将按钮列表重构为 map 功能

java - 在 java 中添加一个简单按钮,但 java 不允许我这样做

Android:自定义工具提示 Google map 中的按钮单击事件

java - 在Android应用程序中存储用户设置的最合适方法是什么

android - 应用程序签名过程如何适用于在网站上创建的应用程序

java - 在 API Retrofit PUT 调用中将自定义对象数组作为参数传递

html - 将 HTML 按钮放置在表格的右下角

c++ - C++获取鼠标中键点击事件的方法

Android:如何捕捉线性布局中任何按钮的点击?