Android:在onTouchListener中设置relativelayout的颜色

时间:2013-12-26 16:12:35

标签: android relativelayout ontouchlistener

我有一些relativeLayout,其中有多个textview和imagebuttons,所以为了不逐一制作onTouchListener,我实现了以下代码:

    relative1.setOnTouchListener(new OnTouchListener() 
    {
        @Override
        public boolean onTouch(View arg0, MotionEvent event) 
        {
            if(event.getAction()==MotionEvent.ACTION_DOWN )
            {
                relative1.setBackgroundColor(getResources().getColor(R.color.tran_black));
            }

            if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL))
            {
                relative1.setBackgroundColor(getResources().getColor(android.R.color.transparent));
            }
            return false;
        }           
    }); 

问题:

按下时relative1 RelativeLayout已变为tran_black颜色,但在Action_up后无法变回透明状态。

怎么可能被证实?谢谢!

3 个答案:

答案 0 :(得分:0)

只需返回true而不是false

根据onTouch method doc,返回值为True if the listener has consumed the event, false otherwise. 这意味着当您返回false时,连续的事件将不会传递给您的侦听器。

您还可以参考我的回答here,其中包含评论中的示例。

答案 1 :(得分:0)

首先清除上一个颜色然后应用新颜色并返回true而不是false,如果你返回false则它将只听一次触摸,而不是多次:

 relative1.setOnTouchListener(new OnTouchListener() 
    {
        @Override
        public boolean onTouch(View arg0, MotionEvent event) 
        {
            if(event.getAction()==MotionEvent.ACTION_DOWN )
            {
                relative1.setBackgroundColor(getResources().getColor(R.color.tran_black));
            }

            if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL))
            {   //first clear previous color
                relative1.setBackgroundColor(0);
                //now set new color
                relative1.setBackgroundColor(getResources().getColor(android.R.color.transparent));
            }
            return true;
        }           
    }); 

答案 2 :(得分:0)

只为onAction向下返回true,向上取消并取消其他返回super.setOnTouchListener()它将起作用。因为它可能影响该相对布局的另一个侦听器