手机有个列表, 是用一行行LinearLayout布局的想实现当手指触摸一个LinearLayout时, 变背景色, 当UP时,恢复本来的颜色当手指触摸移动到另行LinearLayout时, 本来的LinearLayout也恢复本来的背景色....类似网页上的 MouseOver, MouseOut 这个效果怎么实现.................................

解决方案 »

  1.   

    我是想说用 OnTouchListener 在点上去再马上Move 情况下无法实现,好像因为 我测试了一下, 他的执行过各是 DOWN,然后一直MOVE...(执行好一会儿).............. 最后没有执行UP这样, 本来改变的LinearLayout背景色, 就无法恢复过来!
    想问一下, 如果用LinearLayout一行一行的界面列表, 怎么实现类似于网页上行的Mouseover, MouseOut
      

  2.   


    很怪, 即使你手机点上去, 没有移动, Move 的情况, 还是会执行, 如果手指马上离开屏幕, 才马上被UP替换....这有点不合理???????????????
      

  3.   

    android的touch event是这样的,我觉得这样是合理的,如果你想拖个东西运动的话。
    你这个可以结合move的距离和touch  event一起配合实现这个效果。
    一种是down,up改变颜色;
    一种是move的时候判断移动到哪个item上了,改变颜色
      

  4.   

    但是我这个OnTouchListener是作用在 某个LinearLayout上的啊...move怎么判断移到哪个控件上叱?
      

  5.   

    我说的是手指头上屏幕上移动, 不是拖某个View移动当手指在某个View时, 该View变背景色, 移开时恢复本来颜色, 但手指没有离开屏幕...
      

  6.   


    这个通过OnTouch事件里面判断event的值就可以实现啊。
      

  7.   

    是可以判断, 但是当, 手指移动时, 他的执行是DOWN 再 MOVE......... 然后, 无法执行到UP.....正常情况下, 你手指Touch到某View, 再马上离开, 就会正常执行到UP (DOWN->MOVE->UP)但如果Touch后, 是移动, 并且移出本来的View, 就无法再执行到UP, 会一直执行MOVE好一会儿
      

  8.   

    你的意思是只想要Down和Up事件?如果是这样的话,当判断是Move的时候,假设:View对象名称为v,Event名称为event
    public boolean onTouch(View v, MotionEvent event) 
    {
    if(event.getAction() == MotionEvent.ACTION_MOVE || event.getAction() == MotionEvent.ACTION_OUTSIDE)
    {
    MotionEvent event1 = MotionEvent.obtain(event);
    event1.setAction(MotionEvent.ACTION_UP);
    v.dispatchTouchEvent(event1);
    return true;
    }

    //以下为你的Down或者Up事件代码

    .......

    return false;
    }
      

  9.   

    标准答案:
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    int EvtNum = event.getAction(); switch (EvtNum) {
    case MotionEvent.ACTION_DOWN: {
    v.setBackgroundColor(Color.GRAY);
    return false;
    }
    case MotionEvent.ACTION_MOVE | MotionEvent.ACTION_OUTSIDE: {
    //Toast.makeText(JQqueryActivity.this, "MOVE-OUT", Toast.LENGTH_SHORT).show();
    MotionEvent event1 = MotionEvent.obtain(event);
    event1.setAction(MotionEvent.ACTION_UP);
    v.dispatchTouchEvent(event1);
    return false;
    }
    case MotionEvent.ACTION_CANCEL : {
    v.setBackgroundColor(Color.BLACK);
    return false;
    }
    case MotionEvent.ACTION_UP: {
    v.setBackgroundColor(Color.BLACK);
    //Toast.makeText(JQqueryActivity.this, "UP", Toast.LENGTH_SHORT).show();
    return false;
    }
    default:
    break;
    }
    return false;
    }