2013-12-15 82 views
4

我有一個活動的功能,在那裏我可以創建一個新的ImageView。 我想移動ImageView,所以實施了新的OnTouchListener。這是偉大的工作,但我也想補充一個LongClickListener,這裏是我的問題:Android OnTouchListener干擾OnClickListener

LongClickListener啓動一次,當我移動ImageView

我能做些什麼來解決這個問題?

public ImageView neuesDefaultBild(int x, int y, int id){ 

    ImageView iv=new ImageView(this); 
    iv.setImageResource(R.drawable.usericon); 
    iv.setId(id); 
    iv.setX(x); 
    iv.setY(y); 
    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.width=180; 
    params.height=130; 
    iv.setLayoutParams(params); 

    iv.setLongClickable(true); 
    iv.setFocusable(true); 
    iv.setFocusableInTouchMode(true); 
    iv.setEnabled(true); 

    iv.setOnTouchListener(new View.OnTouchListener(){ 

     public boolean onTouch(View v, MotionEvent event) { 

      boolean defaultResult = v.onTouchEvent(event); 

      switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       break; 

      case MotionEvent.ACTION_MOVE: 

       //Get the coords from the Event 
        int x_cord = (int) event.getRawX(); 
        int y_cord = (int) event.getRawY(); 

        v.setX(x_cord-90); 
        v.setY(y_cord-130); 

        return true; 
      default: 
        return defaultResult; 
      } 
      return false; 
     } 
    }); 

    iv.setOnLongClickListener(new View.OnLongClickListener() { 

     public boolean onLongClick(View v) { 

      Toast.makeText(getApplicationContext(), "Long!!", Toast.LENGTH_SHORT).show(); 

      return false; 
     } 
    }); 
    return iv; 
} 
+0

閱讀本http://developer.android.com/reference/android/view/GestureDetector.html設置 – pskink

回答

5

OnclickListener可以使用OnTouchListener本身 只需設置一個標誌

private int boolean onClick; 

    switch (event.getAction()) 
    { 
     case MotionEvent. ACTION_DOWN: 
     { 
       onClick = true; 
       break ; 
     } 
     case MotionEvent. ACTION_MOVE: 
     {     
       onClick = false;     
       break ; 
     } 
     case MotionEvent. ACTION_UP: 
     { 
       if(onClick) 
       { 
        //Call your own click listener 
       } 
       break; 
     } 
    }