layout 안에 버튼, 이미지 등등을 잔뜩 넣었습니다.
화면의 어디라도 터치시 뭔가를 처리하고 싶은데
좋은 방법이 없을까 싶어 문의드립니다.
제가 아는 방법은
모든 view 에 touch 리스너를 달아서 그 리스너에서 처리하는 것인데
20~30개의 view 가 있고, 각 view 마다 각각의 클릭 리스너, 터치리스너 등등 각자 고유의 이벤트 처리를 하고 있어서
완전 노가다로 다 일일이 넣어야 하는 문제가 있습니다.
모든 view 를 모두 가지고 있는 layout 에만 touch listener 를 달아서 해보니
별도로 리스너처리를 한 view 를 클릭시에는
touch listener 로 이벤트가 오지 않네요 ㅜㅜ
원래 이거 다 이렇게 노다가 해야 하는건가요?
dispatchtouchEvent() 라는 함수를 override 하니 모든 터치 이벤트에 대해서 호출이 되네요.
근데 어떤 view 를 터치 했는지느 알수 없네요 ㅜㅜ
기초개발자님. 배경에 리스너 단다고 해서, 배경위에 위치하는 버튼들의 이벤트도 함께 받을수는 없습니다
질문을 정확히 이해 하지 못했지만,
20 여 개 View를 정의할 때 setOnClickListener와 setOnTouchListener를 각각 등록 하신다는 말씀이신가요?
button1.setOnClickListener(new OnClickListener() { });
button2.setOnClickListener(new OnClickListener() { });
...
button20.setOnClickListener(new OnClickListener() { });
이런 식으로 하신다는 말씀이신지? 맞다면
각 View에 리스너를 등록하실 때, 리스너를 생성하도록 하는 것 보다
this를 정의 하시면 해당 Activity에 onClick(View v), onTouch(View v)가 오버라이딩며,
인자로 전달 받는 view의 id로 각 view를 구분할 수 있긴 한데
이걸 의미하는게 아니라면 제가 이해를 잘 못한듯 하네요
개굴딱지님.
저는 아래와 같이 모든 view 에 대해 리스너를 등록시켜야 하는지 물어본겁니다.
아래와 같이 하면 touch된 view id도 알수있으니 모든게 가능하긴 한데,,
모든 view 에 일일이 리스너 등록해야 하는게 정답인가 싶어서요..
액티비티에 뭔가 하나 만들어두면 그곳으로 모든 터치 이벤트가 오고, 그와 함께 view id 도 오는게 있으면 좋은데
아무리 찾아봐도 없네요.ㅜㅜ
m_touchListener;
button1.setonClickListener(m_touchListenrer);
button2.setonClickListener(m_touchListenrer);
button3.setonClickListener(m_touchListenrer);
...
dispatchTouchListener 였나
여기에서 모든 터치 이벤트를 받습니다.