터치한 뷰 밖으로 손을 드래그 하였을 때 처리 (Focus, clicked, pressed)
조회수 3030회
셀랙터 를 사용할 때, focus, press 말고 더 있었나는 기억이 안나지만,
focus의 정확한 쓰임새를 잘 모르겠습니다 ㅠ
버튼 같은 경우는 터치를 한 상태에서 드래그를 하여 그 버튼의 범위를 한번이라도 넘어가면 버튼 이벤트의 실행이 취소되는데(정확히는 시작도 안한 거지만) 다른 뷰(저는 listview 자체에 주었습니다. 아이템이 아닌) 에서는 누른 상태에서 그 범위를 넘어가도 실행이 되더군요....
listview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_UP:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
break;
}
return false;
}
});
OnClickListener를 사용하면 OnItemClickListener를 사용하라고 하면서 애러가 나서 OnTouchListener를 사용하였는데요. 이것 때문 일지....
뷰 밖으로 손가락을 드래그 해서 이동시켰을 때 취소 처리는 어떻게해야하나요...
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
제가 잘 이해한 건지는 모르겠지만, onClickListener()를 이용하면 클릭 후 (action_down) 클릭한 걸 취소하려고 뷰 밖으로 포인트를 이동한 후 손을 때면(action_up) onClickListener 안의 onClick은 실행되지 않습니다. ListView는 아이템자체를 클릭할 수 있으므로
list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("TEST", "position:" + position); } });
listView에 setOnItemClickListener를 달면 동일한 동작을 얻을 수 있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
focus 는 예전 트랙볼의 잔재(?)라고 할 수 있을것 같네요.
처음 트랙볼을 달고 HTC 에서 디바이스가 나왔을때는, 트랙볼로 각 위젯을 이동 할 수 있었습니다. 트랙볼을 굴려 리스트의 아이템을 이동한다거나 하는 등으로요.
이렇게 트랙볼로 이동을 하면, click 하거나 touch 하지 않아도 그 위젯이 활성화 된 상태가 되죠. 이상태가 state_focused 가 true 인 상태입니다.
간혹가다 안드로이드 에뮬레이터나 지니모션등의 시뮬레이터에서 컴퓨터의 방향키로 움직이곤 할때가 있는데 이때도 focus 상태를 사용하게 됩니다.
트랙볼이 있는 디바이스가 멸종되고, 이후에는 잘 쓰이지 않았죠.
기본적으로 터치를 사용할때는 focus 상태를 표시하지 않습니다.
(EditText 에서는 입력할 수 있는 상태를 표시할때 state_focused 를 사용합니다.)
(어제 Google developer summit 에서 커니님이 발표한 MultiWindows 관련된 내용보니, focus 상태에 대한 얘기가 있었는데 Activity 에 대한 focus 였는지 Widget 에 대한 focus 였는지 정확히 기억이 안나네요.)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력