2014-12-03 3 views
2

내가 여기에 코드의에서 호출 할 onOptionsItemSelected() 나는 방법보다 다른 클래스에 onTouch() 메소드를 호출하는 싶은데요 :호출하는 방법을 onTouch() 메소드

public boolean onTouch(View v, MotionEvent event) { 
      float downx = 0, downy = 0, upx = 0, upy = 0; 
      int action = event.getAction(); 
      switch (action) { 
      case MotionEvent.ACTION_DOWN: 
       downx = event.getX(); 
       downy = event.getY(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       break; 
      case MotionEvent.ACTION_UP: 
       upx = event.getX(); 
       upy = event.getY(); 
       mCanvas.drawLine(downx, downy, upx, upy, mPaint); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_CANCEL: 
       break; 
      default: 
       break; 
      } 
      return true; 
      } 

내가 싶었 방법은 에서 onTouch() 전화 :

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 

     case R.id.LINE_ID: 
      //i want to call it here    
      return true; 

onOptionsItemSelected()MainClass에 있지만 onTouch()MainClass의 서브 클래스입니다.

어떻게 할 수 있습니까? 어떻게 drawLine()을 호출 할 수 있습니까?

UPDATE :

내가 시도 :

View v = null; MotionEvent event = null; 
      MyView sub_class = new MyView(getBaseContext()); 
      sub_class.onTouch(v, event); 

있지만 추락입니다! 도와주세요. 내 생각에 이것은 약간의 ppl에 대해 매우 쉽습니다. 그들은 (

답변

1

) onTouch()을 호출하지 않아야합니다. 이것은 터치 이벤트가있을 때 안드로이드 시스템이 생성하는 것입니다. 당신은 아무것도, 어떻게 당신이 그것을 전달하는 것을 MotionEvent 해결하지 않을 것이다 경우. 당신이해야 할 것은 터치 이벤트에 올 때 당신의 onTouch() 방법은 호출 어떤 메서드를 호출하는 것입니다

?. 수동으로 호출 할 수 있으므로 onTouch()을 리팩토링한다 적절한 매개 변수를 사용하여 터치 이벤트가 발생할 때 적절히 동작하는 메서드를 호출 한 다음 onOptionsItemSelected() 메서드를 호출 할 수도 있습니다.

+1

나는 두 명의 터치리스트를 보유하고 있는데, 어떻게 특정 트리거를 트리거 할 수 있습니까? –

+0

@ New2Android 이것은 정확히 요점입니다! 터치가 올 때 onTouch() 메소드가하는 것이 무엇이든보아야합니다. 그런 다음에 그렇게해야합니다. 터치 리스너를 전혀 트리거하지 않아야합니다. 시스템에 의해 트리거됩니다. –

+0

그러면 drawline()을 어떻게 호출 할 수 있습니까? –

0

OS 자체에서 호출되는 안드로이드 뷰의 내부 메소드를 호출하면 안됩니다. 그러나 하위 클래스에서 인스턴스를 만들고이 객체를 통해 onTouch 메서드를 호출하면이 작업을 계속 수행 할 수 있습니다. 아래 코드를 확인하십시오.

SubClass sub_class = new SubClass(); 
sub_class.onTouch(v, event); 
+0

"이벤트를 변수로 해결할 수 없습니다."내 코드는 다음과 같습니다. MyView sub_class = new MyView (getBaseContext()); \t \t \t sub_class.onTouch (v, event); –

+0

무슨 뜻인가요? – abhinav

+0

sub_class.onTouch (v, event)에서 해당 오류가 있습니다. 그것을 해결하는 방법? –