0

我想在不使用任何图像的情况下按下并释放按钮时突出显示一个按钮,因此我正在使用 SO 上的帖子中的以下代码,但它对我不起作用:

public class MainActivity extends Activity {

    ImageButton myButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myButton = (ImageButton) findViewById(R.id.button);
    myButton.setOnTouchListener(new ButtonHighlighterOnTouchListener(myButton));
    }

    public class ButtonHighlighterOnTouchListener implements OnTouchListener {

    final ImageButton imageButton;

    public ButtonHighlighterOnTouchListener(final ImageButton imageButton) {
        super();
        this.imageButton = imageButton;
    }

    @Override
    public boolean onTouch(final View view, final MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        //grey color filter, you can change the color as you like
        imageButton.setColorFilter(Color.parseColor("#5F2444"));
        System.out.println("called down");
        } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
        imageButton.setColorFilter(Color.parseColor("#245F30"));
        System.out.println("called up");
        }
        return false;
    }

    }

这里有什么问题?

原帖在这里:如何使按钮突出显示?

4

2 回答 2

2

好的,我自己解决了,希望它也能帮助其他人

public static void buttonEffect(View button) {
    button.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            v.getBackground().setColorFilter(0xe0f47521, PorterDuff.Mode.SRC_ATOP);
            v.invalidate();
            break;
        }
        case MotionEvent.ACTION_UP: {
            v.getBackground().clearColorFilter();
            v.invalidate();
            break;
        }
        }
        return false;
        }
    });
    }

您也可以更改颜色,愉快的编码:)

于 2013-04-26T17:19:56.080 回答
0

我建议您在开关中添加此事件,否则当用户单击按钮并按住直到他离开按钮时,按钮仍然处于选中状态。

case MotionEvent.ACTION_CANCEL:
{
    v.getBackground().clearColorFilter();
    v.invalidate();
    break;
}

我希望我有帮助

于 2013-09-03T21:25:52.843 回答