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

时间:2018-11-03 22:46:55

标签: android imageview android-studio-3.0 togglebutton

我可能在问一个基本问题,但是老实说,我没有真正的开发或代码知识。我被要求制作一些基本应用程序的原型,该应用程序应该主要是屏幕上的按钮,可激活或不可激活的按钮。我写了某种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();
        }
    });

TL; DR 我应该如何继续按一下按钮,同时禁用其他按钮,然后再按一次,我就转到另一项活动。

谢谢您的帮助:) -Pliskin

1 个答案:

答案 0 :(得分:1)

这就是我要做的。假设您有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
        }       


    }
});

现在,您可以在班级中创建一个私有方法:

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中添加一些内容:

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.
        }                   
    }
});