월별 글 목록: 2010년 8월월

[안드로이드] Touch 이벤트의 ACTION 처리

 View의 setOnTouchListener 이벤트를 처리하고자 하는 경우 아래 함수로 이벤트를 받게 됩니다.

public boolean onTouch(View v, MotionEvent event) { }

 여기에서 View는 터치 이벤트를 받은 View를 의미하고 event에서는 어떠한 터치 이벤트가 발생했는지 정보를 얻을 수 있습니다.
자세한 것은 android.view.MotionEvent 소스를 보면 아실 수 있지만 getAction() 함수를 주로 사용합니다.Action 종류에는 아래와 같이 여러 가지가 존재합니다.

ACTION_MASK, ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_CANCEL, ACTION_OUTSIDE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_POINTER_INDEX_MASK

 자세한 것은 http://developer.android.com/reference/android/view/MotionEvent.html 페이지를 참고하시길 바랍니다.
위 Action 중에 View를 클릭했을 때는 ACTION_DOWN가 오고,  터치가 끝나서 손가락을 떼면 ACTION_UP이 오게 됩니다. 그 중간에는 ACTION_MOVE가 오게 됩니다.

 한가지 팁으로는 제 생각에 ACTION_DOWN 중에 View의 범위를 벗어나면 ACTION_OUTSIDE이나 ACTION_CANCEL이 와야 할텐데 이 부분이 호출이 되지 않는 문제가 생겼습니다. 그래서 ACTION_MOVE 이벤트 중에 view의 isPressed, isSelected 상태를 체크하여 isPressed가 true라면 아직 눌려있는 상태라서 범위를 벗어나지 않은 상태이고, false 라면 범위를 벗어난 것이라고 판단 하도록 처리하겠습니다. 이러한 처리는 버튼의 터치 이벤트를 처리할 때 간혹 필요한 부분이라고 생각이 됩니다.

[안드로이드] ListView 안에 CheckBox가 있을 경우 클릭 처리 하기

 ListView 안의 Item 중에 CheckBox가 들어가게 되면 List 영역을 클릭해도 클릭이 되지 않고 CheckBox만 클릭이 되도록 되어 있습니다. 이러한 경우에 List 가 클릭 되도록 처리하려면 CheckBox의 layout에 아래와 같이 속성을 설정하면 됩니다.

android:focusable=”false”

 안드로이드 설정 페이지의 리스트 UI 같이 체크박스도 클릭이 안되록 처리 하려면 clickable 설정을 추가하면 됩니다.

android:clickable=”false”

 이렇게 List를 클릭되도록 처리 했다면 onItemClick 이벤트에서 아래와 체크가 되고, 체크가 풀어지도록 처리해야 합니다.

CheckBox deleteCheckBox = ((CheckBox)view.findViewById(R.id.checkbox));
if(deleteCheckBox != null) {
deleteCheckBox.setChecked(dataAdapter.IsDeleteCheck(position));
}

 dataAdapter 에서 데이터들을 가지고 있기 때문에 IsDeleteCheck 라는 함수를 만들어서 확인을 하고 있습니다.
IsDeleteCheck 와 같은 함수를 사용하기 전에 상위에서 Check 값을 한번 체크해서 바꿔주는 로직이 필요합니다.
저는 아래와 같은 함수로 만들었습니다. 실제로 boolean 값을 ! 를 사용해 반전만 시켜주었습니다.

dataAdapter.dataResult.ChangeDeleteCheck(position);

 마지막으로 Adapter의 getView 함수에서 위와 같이 CheckBox를 얻어와서 값에 데이터에 따라서 setChecked가 될 수 있도록 처리를 해주면 됩니다. 이 부분을 해주지 않으면 스크롤을 할 때 체크 박스의 값이 다시 설정 되지 않고 계속 남아있는 문제가 발생합니다.


안드로이드 2.1 버전 기준으로 작성이 되었습니다.

안드로이드용 가격 검색 프로그램 – PriceSearch 1.22v

 안드로이드용 가격 검색 프로그램 PriceSearch의 1.22 버전입니다. 안드로이드 마켓이나 아래 apk 파일을 통해서 설치하실 수 있습니다.

1) 옵션 페이지에서 설정한 데이터가 저장이 되어 다시 실행해도 옵션 값이 유지되어 있도록 수정하였습니다.
2) 검색을 다시 하였을 때 리스트가 제일 상단으로 이동하여 보여지도록 처리하였습니다.
3) 기타 여러 가지 로직 수정을 진행하였습니다.

1401193516.apk