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