Nice programing

onTouchevent () 대 onTouch ()

nicepro 2020. 12. 12. 12:28
반응형

onTouchevent () 대 onTouch ()


onTouchEvent 및 onTouch로 많은 실험을 한 후 인터페이스를 선언하고 리스너를 올바르게 배치하는 한 onTouch가 원하는 모든 곳에서 작동한다는 것을 발견했습니다 (활동 또는보기에 관계없이)! 반면에 onTouchEvent는보기 내에서만 작동합니다! 내 가정이 맞습니까? 이것이 진짜 차이점입니까?


예를 올바른지 - onTouch()에 의해 사용되는 사용자View동안 터치 이벤트를 얻을 수 onTouchEvent()에 의해 사용되는 파생 클래스View터치 이벤트를 얻을 수 있습니다.


onTouchEvent () 및 onTouch () 작동 방식과 관련하여 약간의 혼란이 있습니다 (이 질문에 대한 내 의견을 볼 수 있습니다). 아래의 몇 가지 조사 후 내가 찾은 것입니다. 이것은 초보자에게 도움이 될 수 있습니다.

1) 구현 :

onTouch ()를 사용하려면 세 가지를 수행해야합니다.

1- OnTouchListener 구현

2- 설정하려는 뷰에서 setOnTouchListener ()를 호출하여 이벤트를 잡습니다.

3- 이벤트를 처리하기 위해 onTouch () 재정의

그러나 onTouchEvent ()를 사용하려면 위의 1 단계와 2 단계를 수행 할 필요가 없습니다. onTouchEvent ()를 재정의하면됩니다.

2) 작업 :

onTouch ()는보기,보기 그룹, 활동에서 작동합니다. 뷰, 뷰 그룹 또는 활동 내에서 onTouch ()를 사용할 수 있음을 의미합니다. 이 메소드는 두 개의 인수 [onTouch (View v, MotionEvent e)]를 사용합니다. 이를 통해 활동 또는보기 그룹의 여러보기에 대한 이벤트를 필터링 할 수 있습니다. 또는 활동 자체가 처리 할 수 ​​있습니다. onTouchEvent ()는 하나의 인수 [ onTouchEvent(MotionEvent e)]를받습니다. 따라서이를 구현하는 뷰 내부 또는 파생 된 뷰에서만 사용할 수 있습니다. 파생 된 뷰를 사용하면 onTouchEvent ()에 정의 된 터치 동작을 확장 할 수 있습니다.

이러한 옵션은 때때로 학습자에게 혼란을 야기하지만 Android의보다 유연한 개발 철학의 일부라고 생각합니다.


ontouch () 및 ontouchevent ()를 사용했습니다. ontouch는 단일 뷰 (예 : Linearlayout)에서 button, imagebuttons 등과 같은 단일 뷰의 요소를 작업 할 때 사용되는 반면 나머지 영역에서 작업하려면 내 요소 (예 : 버튼) ontouchevent를 사용합니다.


onTouchEvent ()는 실제로 것이다 견해 중 어느 것도 터치 이벤트를 소비하지 않는 경우 활동에 의해 호출됩니다.

그리고 당신이 말했듯이 onTouch ()는 다음과 같은 한 모든 클래스에서 사용할 수 있습니다.

  1. 해당 클래스 (예 : Foo)는 OnTouchListener 인터페이스를 구현하고
  2. 해당 클래스는 view.setOnTouchListener(foo);

사용자 정의보기를 만드는 동안 다음을 수행 할 수 있습니다.

@override onTouchEvent(MotionEvent e){}

View, ViewGroup 또는 Activity에 onTouch를 추가 할 수 있습니다.

onTouch(View v, MotionEvent e) { //you can filter any View's touch }

onTouch는 일반적이고 onTouchEvent는 View에만 해당됩니다. 또한 onTouch를 사용하여보기를 필터링 할 수도 있습니다.


또 다른 차이점을 찾았습니다. onTouchEvent는 더 이상 사용되지 않는 MotionEvent.ACTION_POINTER_2_DOWN 및 MotionEvent.ACTION_POINTER_2_UP 이벤트를 가져 오지 않는 것 같습니다.

물론 그들은 아주 오래되었고 우리는 그것들을 사용해서는 안됩니다.

이것은 Android 5.1 api 22에 있습니다.


onTouchEvent는 에 의해 구현 된 방법이다 보기 , 활동 과 같은 다른 기본 클래스 의 LinearLayout , ..

public boolean onTouchEvent(MotionEvent event) {
    throw new RuntimeException("Stub!");
}

파생 클래스로이 메서드를 재정의 할 수 있습니다.

이므로

onTouch () 는 인터페이스 OnTouchListener {}에 의해 정의됩니다.

public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }

따라서이 인터페이스를 클래스로 설정할 때 하나만 구현하면됩니다.

참고 URL : https://stackoverflow.com/questions/5002049/ontouchevent-vs-ontouch

반응형