2013-02-21 3 views
0

내 응용 프로그램에서, 나는 ontouchevent 및 onDraw() 메서드를 호출하고 위치를 얻으려면 단추를 클릭하면 touchevent.but 위치를 얻고 싶습니다. onTouchEvent 당신은 당신이 그것을 호출 할 수 없습니다 (터치 이벤트 제공하는 안드로이드 사용하는 콜백 메소드이기 때문에 내가이 작업을 수행 할 수있는 방법?, 당신이 어떤 좋은 일을하지 않을 수동으로 onTouchEvent를 호출 나에게안드로이드의 touchevent 페인트

public void getPos(View v){ 
     //here i want to call onTouchEvent method.. 
    } 

    @Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(event.getAction()==MotionEvent.ACTION_UP) { 

     Log.d("position", event.getX() + "-" + event.getY()); 
     return true; 
    } 
return false; 
} 
+0

버튼의 XML에 'android : onClick = "getPos"가 있습니까? – Ridcully

+0

예. 그런데 어떻게 단추를 클릭하여 onTouchEvent 및 onDraw 메서드를 호출 할 수 있습니까? –

+0

아래 내 대답을 참조하십시오. – Ridcully

답변

1

사용자가 직접 호출하지 마십시오. on...이라는 메서드는 특정 이벤트가 발생할 때 Android 시스템에서 호출하는 콜백 메서드입니다. 귀하의 경우이 메서드 (Activity에서 정의 됨)는 다른 곳에서 처리되지 않는 터치 이벤트가있을 때 호출됩니다. 버튼을 만진 경우이 버튼에 의해 처리되므로 해당 활동의 onTouchEvent가 호출되지 않습니다. 당신의 버튼을 찾을 수 귀하의 onCreate() 방법합니다 (acitity이 생성에 beeing의 행사에서 안드로이드에 의해 호출 다른 방법)에 따라서

과 리스너를 추가 : 당신은 무엇을 할 수 있는지

, 당신의 버튼에 onTouchEventListener을 추가하는 것입니다 과 같이 : 버튼을 방해하지로

View button = findViewById(R.id.your_button_id); 
button.setOnTouchListener(new OnTouchListener() { 
    onTouch(View v, MotionEvent event) { 
     if(event.getAction()==MotionEvent.ACTION_UP) { 
      Log.d("position", event.getX() + "-" + event.getY()); 
     } 
     return false; 
    } 
} 

주, 나는 항상 false를 반환 할 것이다. true을 반환하면 이벤트가 "사용 중지"되고 더 이상보기에서 처리되지 않습니다. 그래서 당신은 마음대로 이것을 조정할 수 있습니다. Btw. 보시다시피 OnTouchListener를 모든 뷰에 첨부 할 수 있으므로 실제 버튼이 필요하지 않을 수도 있습니다.

+0

가 작동하는지 알 수 있도록 활동 코드를 추가하십시오. 버튼이 클릭되었을 때 position.because가 부여 될 것이라고 생각합니다. –

+0

그것은 터치 이벤트의 위치를 ​​화면에 표시합니다. event.x와 event.y에 포함 된 것. 왜 그냥 해보지 않으 시렵니까? – Ridcully

+0

그것의 작업 .. 정말 많이 .. 그 후 나는 그 위치에 원을 그려 싶다. 가능한가? –

0

도와주세요

대신에 터치 이벤트를 추적하고 getPos이 호출되면 최신 터치 이벤트 데이터를 읽을 수 있습니다. 코드는 다음과 같이 표시되어야합니다.

private float lastX = -1; 
private float lastY = -1; 

public void getPos(View v){ 
    //here i want to call onTouchEvent method.. 
    if (lastX == -1 || lastY == -1) { 
     // no touch events 
     return; 
    } 
    // do whatever you want with the x,y values 
    //reset them for the next check 
    lastX = -1; 
    lastY = -1; 
} 

    @Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(event.getAction()==MotionEvent.ACTION_UP) { 
     lastX = event.getX(); 
     lastY = event.getY(); 
     Log.d("position", event.getX() + "-" + event.getY()); 
     return true; 
    } 
    return false; 
    } 
+0

해당 기능이 작동하지 않습니다. onTouchEvent ..에 입력하지 않음 –

+0

터치 이벤트 수신을 위해 등록하셨습니까? View.setOnTouchListener (this); ? –

+0

번. 이걸 어디에 써야 하나? –