我正在使用Android Studio,我想知道是否有任何方式将两个图像添加到一个按钮,并且其中只有一个可以一次显示(活动)?
现在我使用以下技术:
在我的活动中,我有4个按钮,所有这些按钮都注册了一个View.OnTouchListener
,我按照这样管理事件:
private class ButtonOnTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventaction = event.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
clickButton(v);
return true;
case MotionEvent.ACTION_UP:
unClickButton(v);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
v.callOnClick();
}
break;
}
// tell the system that we handled the event but a further processing is required
return false;
}
private void clickButton(View button) {
switch (button.getId()) {
case R.id.buttonLogin:
button.setBackgroundResource(R.drawable.activity_main_button_enter_press);
break;
case R.id.buttonRegister:
button.setBackgroundResource(R.drawable.activity_main_button_registration_press);
break;
case R.id.buttonCheckUpdate:
button.setBackgroundResource(R.drawable.activity_main_button_update_check_press);
break;
case R.id.buttonExit:
button.setBackgroundResource(R.drawable.activity_main_button_exit_press);
break;
}
}
private void unClickButton(View button) {
switch (button.getId()) {
case R.id.buttonLogin:
button.setBackgroundResource(R.drawable.activity_main_button_enter_idle);
break;
case R.id.buttonRegister:
button.setBackgroundResource(R.drawable.activity_main_button_registration_idle);
break;
case R.id.buttonCheckUpdate:
button.setBackgroundResource(R.drawable.activity_main_button_update_check_idle);
break;
case R.id.buttonExit:
button.setBackgroundResource(R.drawable.activity_main_button_exit_idle);
break;
}
}
}
因此,通过这种方式,我在事件中进行切换,以确定单击了哪个按钮并更改了相应的资源。这意味着对于每个活动,我必须创建一个自定义类并在事件中执行切换。
我可以制作如下内容:
private void ClickButton(View button){
button.setBackgroundResource(button.getResourceImage1);
}
private void unClickButton(View button){
button.setBackgroundResource(button.getResourceImage2);
}
这样我可以创建一个全局OnTouchListener
,只需在每个按钮的xml文件中设置图像,而不用担心任何java代码。
我尝试在background
/ foreground
张图片之间切换,但出于某种原因我无法隐藏前景图片。
答案 0 :(得分:1)
您可以为此目的创建一个可绘制的文件选择器 像这样:
button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:drawable="@drawable/activity_main_button_enter_press"
android:state_pressed="true" />
<item
android:drawable="@drawable/activity_main_button_enter_press"
android:state_selected="true" />
<item
android:drawable="@drawable/activity_main_button_enter_idle" />
点击按钮时在你的java代码中:
btn.setSelected(!btn.isSelected());
并将选择器可绘制文件设置为您的按钮:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector.xml"
android:text="Click_me"/>
答案 1 :(得分:0)
您可以为每个按钮创建State List Drawable并实施android:state_pressed
。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:drawable="@drawable/activity_main_button_enter_press"
android:state_pressed="true" />
<item
android:drawable="@drawable/activity_main_button_enter_idle" />
</selector>