多次按下时如何编写具有不同效果的按钮
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.
}
}
});
我可能会问一个基本问题,但老实说,我没有真正的开发或代码知识。我被要求制作一些基本应用程序的原型,应该主要是屏幕上的按钮,可激活或可停用。我写了一些 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.
}
}
});