多次按下时如何编写具有不同效果的按钮

How to code a button with differents effects when pressed multiple times

我可能会问一个基本问题,但老实说,我没有真正的开发或代码知识。我被要求制作一些基本应用程序的原型,应该主要是屏幕上的按钮,可激活或可停用。我写了一些 TL;DR 以防我的解释不好

我一直在 Android Studio 3.0 上对此进行编码,我(几乎)设法将 PNG 文件放在屏幕上,使其看起来像一个按钮。 事情是,虽然应用程序的某些部分主要由独立的可切换按钮组成。有一部分按下按钮必须取消选择其他按钮。并且,如果第二次按下此按钮,则打开另一个活动。

这是我正在使用的部分代码。

这是独立按钮

indbutton1.setOnTouchListener(new View.OnTouchListener(){
        // track if the image is selected or not
        boolean isSelected = true;

        public boolean onTouch(View v, MotionEvent event) {
            if(isSelected) {
                indbutton1.setImageResource(R.drawable.indbutton1slct);
            } else {
                indbutton1.setImageResource(R.drawable.indbutton1nosl);
            }
            // toggle the boolean
            isSelected = !isSelected;
            return false;
        }
    });

还有这个用于其他活动

  movements.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent gestesActivity = new Intent (getApplicationContext(), movements.class);
            startActivity(movementsActivity);
            finish();
        }
    });

长话短说;博士 我应该如何继续混合按下按钮,禁用其他按钮,然后,当第二次按下时,我转到另一个 activity。

感谢您的帮助:) -Pliskin

下面是我将如何做到这一点。假设您有 4 个按钮。

// your class fields
boolean [] alreadyTouched = new boolean[4];

对于 4 个按钮中的每一个:

button0.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(!alreadyTouched[0]){
            setAlreadyTouched(0);
            // one click actions here
        }else{
            // second click's action
        }       


    }
});

现在您在 class 中创建一个私有方法:

private void setAlreadyTouched(int index){
    for (int i = 0; i< alreadyTouched.length; i++)
        alreadyTouched[i] = false;
    if(index != -1)
        alreadyTouched[index] = true;
}

并在按钮失去焦点时重置布尔数组:

button0.setOnFocusChangeListener(new View.OnFocusChangeListener(){
    @Override
    public void onFocusChange(View view, boolean hasFocus){
        if(!hasFocus)
            setAlreadyTouched(-1);
    }
});

您可以做完全相同的事情,但如果您想要两次以上的点击并稍作修改,则可以使用一个 int 数组。例如:

// your class fields
int[] alreadyTouched = new int[4];

您的私有方法:

private void setAlreadyTouched(int index){
    if(index == -1){
        for (int i = 0; i< alreadyTouched.length; i++)
            alreadyTouched[i]=0;
    }else
        alreadyTouched[index] = alreadyTouched[index] +1 ;
}

然后在你的 onClickListeners 中添加一些 if :

button0.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        setAlreadyTouched(0);
        switch(alreadyTouched[0]){            
            case 1:
            // one click actions here
            break:
            case 2:
            // second click's action
            break:
            // ... and so on
            default:
            // action for max number of clicks here.
        }                   
    }
});