2013-06-05 2 views
0

onFling 이벤트를 듣기 위해 제스처 감지기를 이미 사용하고있는보기에있는 단추가 긴 프레스 이벤트를 수신 대기하도록 설정하려면 어떻게해야합니까?안드로이드의 여러 청취자

참조 용 코드를 추가했습니다. 하나의 액티비티에 여러 리스너를 구현할 수있는 방법을 설명하십시오. 또한 단일보기에 대해 여러 청취자를 구현할 수 있습니까? 다른 하나는 단순히 당신이 onLongClick에서 true를 반환 완벽 전까지 작동

button.setOnLongClickListener(new OnLongClickListener() { 

    public boolean onLongClick(View arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
}) 

을 시도해보세요 onfling 청취자

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.knowledge); 

    summary =(TextView)findViewById(R.id.textSummary); 
    buckview = (View) findViewById(R.id.bucketView); 
    ball = (View)findViewById(R.id.meatBall); 
    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    View mainview = (View) findViewById(R.id.mainView); 

    /* 
    //Set touch release listener for bucket view 
    mainview.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_UP) 
      { 
       buckview.setVisibility(RelativeLayout.GONE); 
      } 
      return false; 
     } 
    }); 
    */ 


    // Set the touch listener for the main view to be our custom gesture listener 
    mainview.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     } 

    }); 
    ball.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      buckview.setVisibility(ImageView.VISIBLE); 
      return false; 
     } 
    }); 
    ball.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if(event.getAction()==MotionEvent.ACTION_UP) 
      { 
       buckview.setVisibility(ImageView.GONE); 
       return false; 
      } 
      else 
      return true; 
     } 
    }); 
} 

class MyGestureDetector extends SimpleOnGestureListener { 

    public void onShowPress(MotionEvent event){ 

    } 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    Intent intent = new Intent(Knowledge.this.getBaseContext(), Knowledge.class); 

     /* If only horizontal allowed 
     if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { 
      return false; 
     } 
     */ 
     // right to left swipe 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     startActivity(intent); 
     Knowledge.this.overridePendingTransition(
     R.anim.slide_in_right, 
     R.anim.slide_out_left 
     ); 
     return false;// left to right swipe 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     startActivity(intent); 
     Knowledge.this.overridePendingTransition(
     R.anim.slide_in_left, 
     R.anim.slide_out_right 
     ); 
     return false;// top to bottom swipe 
     } else if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     startActivity(intent); 
     Knowledge.this.overridePendingTransition(
     R.anim.slide_in_top, 
     R.anim.slide_out_bottom 
     ); 
     return false;// bottom to top swipe 
     } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     startActivity(intent); 
     Knowledge.this.overridePendingTransition(
     R.anim.slide_in_bottom, 
     R.anim.slide_out_top 
     ); 
     return false; 
     }else 
     return true; 
    } 

    // It is necessary to return true from onDown for the onFling event to register 
    @Override 
    public boolean onDown(MotionEvent event) { 
      return true; 
    } 


} 


} 
+0

버튼이 여전히 완벽하게 작동해야합니다. 시도한 것과 .. 결과를 말해주십시오. – amalBit

+0

두 개의 다른 수신기를 사용해 보았습니다. 기본보기 용 제스처 탐지기와 버튼에 대한 onlogclicklistener. 그러나, 그것은 잘되지 않았다. –

+0

xml을 디자인하는 동안. 프레임 레이아웃을 사용하고 버튼을 별도의보기에 배치하십시오. – amalBit

답변

0

동안 중 하나는 길게 누르면 리스너입니다. 여기에서 ture을 반환하면 setOnLongClickListener 만 호출됩니다. false을 반환하면 모두 Listener에 속하며 button이 호출됩니다. 귀하의 경우 setOnLongClickListener 또는 setOnTouchListener을 작성했는지 여부와 상관없이 Listenser이 호출됩니다.

이 정보가 도움이되기를 바랍니다.

+0

정확히 true를 반환하고 false를 반환하는 명령문은 무엇을합니까? 현재 청취자가 이벤트를 소비 한 경우 false를 반환합니까? –

+0

@ user2450275 업데이트 된 답변을 확인하십시오. – Gunaseelan

+0

고맙습니다. 도움이되었습니다. –