有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java不允许多个按钮按下

我正在用Camera2API构建一个摄像头应用程序,这对Android开发来说是比较新的。一切都正常,只是解决了问题。但我有一个切换摄像头按钮,从前摄像头切换到后摄像头,或者反之亦然。如果用户继续按下按钮,应用程序将崩溃。尝试将其设置为在再次使用按钮之前完成所有需要执行的操作

我将按钮设置为enabled(启用),但按下后,它会禁用按钮,直到每次完成,然后重新启动,但这似乎不起作用:

//The button to switch the camera to front and back camera.
    mChangeCamera = (ImageButton) findViewById(R.id.change_camera);
    mChangeCamera.setEnabled(true);
    mChangeCamera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        mChangeCamera.setEnabled(false);
            closeCamera();
            //  stopBackgroundthread();
            if (mTextureView.isAvailable()) {
                setUpCamera(mTextureView.getWidth(), mTextureView.getHeight());
                transformImage(mTextureView.getWidth(), mTextureView.getHeight());
                connectCamera();

            } else {
                mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
            }

            mChangeCamera.setEnabled(true);
        }
    });

必须有一个简单的方法来做到这一点,但不能从搜索中找到任何东西。有人知道我如何设置它在用户按下按钮时不崩溃吗


共 (2) 个答案

  1. # 1 楼答案

    我是通过计算多个按钮按下之间的时间来实现的。。。 首先在类中创建全局变量

    private long mLastClickTime = 0;
    

    以及单击之间持续时间的最终整数

     public static final int CLICK_TIME = 400;
    

    然后单击按钮将此代码粘贴到中

    if (SystemClock.elapsedRealtime() - mLastClickTime < CLICK_TIME) {
          return;  //button pressed repeatedly so do nothing
    }
    mLastClickTime = SystemClock.elapsedRealtime();
    
           // button is not pressed repeatedly so add your desired action
    

    当然,如果错误仍然发生,您可以增加单击时间值

  2. # 2 楼答案

    点燃,所以我终于想出了怎么做。您可以使用具有post延迟的处理程序,如下所示:

     mChangeCamera = (ImageButton) findViewById(R.id.change_camera);
        mChangeCamera.setEnabled(true);
        mChangeCamera.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View view) {
                mChangeCamera.setEnabled(false);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mChangeCamera.setEnabled(true);
                    }
                },1000);
                closeCamera();
                //  stopBackgroundthread();
                if (mTextureView.isAvailable()) {
                    setUpCamera(mTextureView.getWidth(), mTextureView.getHeight());
                    transformImage(mTextureView.getWidth(), mTextureView.getHeight());
                    connectCamera();
    
                } else {
                    mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
                }
    
    
            }
        });