【问题标题】:AndroidStudio adding two images to a buttonAndroid Studio 将两个图像添加到一个按钮
【发布时间】:2016-04-23 06:08:12
【问题描述】:

我正在使用 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 图像之间切换,但由于某种原因我无法隐藏前景图像。

【问题讨论】:

    标签: java android xml android-studio


    【解决方案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"/>
    

    【讨论】:

    • 奇怪,它只在我第一次按下按钮时起作用。下次我按它时它不会改变。有什么想法吗?
    • 哦,对不起,我没有清除我之前所有用于更改图片的代码。现在可以了。这就是答案,谢谢! :)
    • 正如我所见,我只能在 xml 文件中创建一个 selector。您知道将所有选择器放在一个文件中的方法吗? @Er.Rohit Sharma
    • 不,不可能。您必须为每个选择器创建不同的 xml 文件。
    【解决方案2】:

    您可以为每个按钮创建一个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>
    

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多