Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用一个图像(灰色)更改按钮的颜色?_Android - Fatal编程技术网

Android 如何使用一个图像(灰色)更改按钮的颜色?

Android 如何使用一个图像(灰色)更改按钮的颜色?,android,Android,我已经知道,如果我有两个图像,我可以切换图像时,按钮被选中或没有(通过使用选择器) 但是只有一张图片。。 我想知道在选择按钮时是否可以更改图像的颜色。 我有4个按钮,我只想指出哪个按钮被选中。 也就是说,我希望图像在未选中时变为灰色,在选中时恢复为原始颜色。 只有一张图片可能吗?可能 试试这个 Button mButton1, mButton21, mButton3, mButton4; int mCurrentId = 0; mButton1.setOnClickListener(mOnCl

我已经知道,如果我有两个图像,我可以切换图像时,按钮被选中或没有(通过使用选择器)

但是只有一张图片。。 我想知道在选择按钮时是否可以更改图像的颜色。 我有4个按钮,我只想指出哪个按钮被选中。 也就是说,我希望图像在未选中时变为灰色,在选中时恢复为原始颜色。 只有一张图片可能吗?

可能

试试这个

Button mButton1, mButton21, mButton3, mButton4;
int mCurrentId = 0;

mButton1.setOnClickListener(mOnClickListener);
mButton2.setOnClickListener(mOnClickListener);
mButton3.setOnClickListener(mOnClickListener);
mButton4.setOnClickListener(mOnClickListener);

View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              mCurrentId = v.getId();
            switch (v.getId()) {
                case R.id.button1:
                     if(mCurrentId == v.getId()){
                     mButton1.setBackgound(Selectimage);
                     }else{
                     mButton1.setBackgound(DefaultImage);
                     }
                case R.id.button2:
                     if(mCurrentId == v.getId()){
                     mButton2.setBackgound(Selectimage);
                     }else{
                     mButton2.setBackgound(DefaultImage);
                     }
                case R.id.button3:
                     if(mCurrentId == v.getId()){
                     mButton3.setBackgound(Selectimage);
                     }else{
                     mButton3.setBackgound(DefaultImage);
                     }
                case R.id.button4:
                     if(mCurrentId == v.getId()){
                     mButton4.setBackgound(Selectimage);
                     }else{
                     mButton4.setBackgound(DefaultImage);
                     }
                     break;
             }

        }
    };

在名为:
txt.XML

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="#424242"/>
</selector>

在按钮中:

     <Button
        .....
        android:background="@drawable/txt"
        ...../>

您可以使用onTouchEvent中的代码来扩展我的按钮类。在我的示例中,我正在更改背景和文本颜色。您可以通过在背景图像上使用色调(颜色过滤器)来更改图像颜色

    public class MyButton extends Button {

    public MyButton(Context context) {
        super(context);
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void setEnabled(boolean enabled) {
    //        super.setEnabled(enabled);
        if (!enabled)
            setBackgroundColor(Color.GRAY);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        //when Button is Pressed
        if (!isPressed()) {
            setBackgroundColor(YOUR PRESSED COLOR);
            setTextColor(Color.BLACK);
        }else {//when Button Released
            setBackgroundColor(<YOUR INACTIVE COLOR>);
            setTextColor(Color.BLACK);
        }
        return super.onTouchEvent(event);
    }
}
公共类MyButton扩展按钮{
公共MyButton(上下文){
超级(上下文);
}
公共MyButton(上下文上下文、属性集属性){
超级(上下文,attrs);
}
公共MyButton(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
}
@TargetApi(Build.VERSION\u code.LOLLIPOP)
公共MyButton(上下文上下文、属性集属性、int-defStyleAttr、int-defStyleRes){
super(context、attrs、defStyleAttr、defStyleRes);
}
@凌驾
已启用公共void集(已启用布尔值){
//super.setEnabled(已启用);
如果(!已启用)
setBackgroundColor(颜色:灰色);
}
@凌驾
公共布尔onTouchEvent(运动事件){
//当按下按钮时
如果(!isPressed()){
setBackgroundColor(您按下的颜色);
setTextColor(颜色为黑色);
}else{//当按钮松开时
setBackgroundColor();
setTextColor(颜色为黑色);
}
返回super.onTouchEvent(事件);
}
}