按钮突出显示 - 如何将onTouch应用于2个按钮

时间:2013-05-08 17:48:33

标签: android button highlight ontouchevent

我有2个这样的按钮:

Button b = new Button(this);
        b.setText("Button onw");
        b.setId(1111);
        b.setBackgroundDrawable(R.drawable.button);
        b.setOnTouchListener(listenerOne);
        rootLayout.addView(b);

        Button b1 = new Button(this);
        b1.setText("Button two");
        b1.setBackgroundDrawable(R.drawable.button);
        b1.setOnTouchListener(listenerOne);
        RelativeLayout.LayoutParams i = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, UIUtils.convertDPToPixels(activity
            .getResources().getDisplayMetrics(), 45));
        i.addRule(RelativeLayout.BELOW, b.getId());
        rootLayout.addView(b1, i);

现在这是我的onTouch:

OnTouchListener listenerOne = new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

        view.getBackground().setColorFilter(Color.parseColor("#B7B2B0"), PorterDuff.Mode.MULTIPLY);
        view.invalidate();
        break;
        case MotionEvent.ACTION_CANCEL:
        view.getBackground().clearColorFilter();
        view.invalidate();
        break;
        case MotionEvent.ACTION_UP:
        view.getBackground().clearColorFilter();
        view.invalidate();
        break;
        }
        return false;
    }
    };

现在的问题是,当我触摸一个按钮时,第二个按钮也会突出显示?为什么这么错呢?

2 个答案:

答案 0 :(得分:0)

使用匿名内部类,如下所示

    b.setOnTouchListener(new OnTouchListener()
    {

    public boolean onTouch(View arg0, MotionEvent event) {
            // TODO Auto-generated method stub
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
             b.setBackgroundColor(Color.BLUE);
            break;
        case MotionEvent.ACTION_UP:
             b.setBackgroundColor(Color.GREEN);
            break;
        }

            return true;
    }

    });

同样适用于按钮b1

    b1.setOnTouchListener(new OnTouchListener()
    {

    public boolean onTouch(View arg0, MotionEvent event) {
            // TODO Auto-generated method stub
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
             b1.setBackgroundColor(Color.BLUE);
            break;
        case MotionEvent.ACTION_UP:
             b1.setBackgroundColor(Color.GREEN);
            break;
        }

            return true;
    }

    });

编辑:我使用了上面的代码。它工作正常。当触摸的按下颜色的按钮变为蓝色时,向上变为绿色。

            b1.setOnTouchListener(listenerOne);
    b.setOnTouchListener(listenerOne);        

和听众

             OnTouchListener listenerOne = new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            view.setBackgroundColor(Color.BLUE);
            break;
        case MotionEvent.ACTION_UP:
             view.setBackgroundColor(Color.GREEN);


        break;
        }
        return false;
    }
    };          

编辑2:

          b.setBackgroundColor(Color.GREEN);//default background  color green
      b1.setBackgroundColor(Color.GREEN); // default background  color green

使用编辑或匿名内部类中的代码

enter image description here

On Touch Down

enter image description here

在释放按钮背景上将再次显示绿色

答案 1 :(得分:0)

使用此

setBackgroundResource(R.color.rojo);

你也可以使用字符串来定义颜色,但它应该在资源中定义。