我有一些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
后无法变回透明状态。
怎么可能被证实?谢谢!
答案 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()
它将起作用。因为它可能影响该相对布局的另一个侦听器