안녕하세요?
custom item을 갖는 ListView를 만들었습니다.
item은 ImageView, TextView로 구성되어 있습니다.
여기서 ImageView를 버튼으로 사용하려고 하는데요.
꼭 ImageView를 클릭할 때만 반응을 하게 하려고 합니다.
ImageView 이외의 영역은 터치해도 아무 반응이 없도록이요.
ImageView에 버튼 처럼 pressed 상태에 따라 이미지가 바뀌도록 아래와 같은 BackgroundDrawable 을 사용 했는데요.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@drawable/btn_normal" />
<item android:state_pressed="true" android:drawable="@drawable/btn_pressed" />
</selector>
문제는 ImageView 이외의 영역(같은 행의)을 터치하면 ImageView가 pressed 상태가 됩니다.
------------------------------------------
■ TextView ○ <-- 여기를 터치
------------------------------------------
↑
pressed 이미지로 바뀜
listView에 setClickable(), setEnable() 등 적용해 봤는데요.
setClickable(false) 은 별다른 반응이 없고,
setEnable(false)은 원하는 결과를 얻을 수 있지만, 화면 이외에 item이 더 있음에도 스크롤이 되지 않는 문제가 있습니다.
ScrollView 사용은 일단 보류하고 있습니다.(출렁이는 효과 때문에ㅋ)
해결 방법이 없을까요??
조언 부탁드립니다!!
그럼 수고하세요 : )
imageView에 버튼 효과가 있는 BackgroundDrawable은 사용할 수 없는 경우라, ClickListener은 사용할 수 없구요.
imageView에 TouchListener를 이용해서 touch down, move, up에 따라 pressed 효과를 주는 방법으로 구현을 해봤습니다.
일단 이렇게 하게 되면 코드가 복잡해지고요. 역시 해결 못하는 문제가 발생하네요. 별로 좋은 방법은 아닌 것 같습니다.
ItemClickListener를 쓰는 방법을 강구해야 겠네요.ㅎㅎ 감사합니다.
일단 방법을 좀 정리해 드리면... (모든 속성이 기본인 상태에서 말씀드립니다.)
imageView 속성에 android:duplicateParentState 속성을 false로 주시구요...
이상태로 테스트를 하시면 배경을 눌렀을때 imageView는 변하지 않을겁니다.
이제 imageView를 클릭가능하게 해야 하는데요.
imageView에 clickable속성을 true로 주시고 테스트 해보세요.
그리고 listView에는 clickable이나 enable 속성은 건들지 마시고 그냥 테스트 하세요.
크게 의미 없거나 오히려 망칩니다. ㅡㅡㅋ




getView 정의한 부분에 imageView 자체에다가 clickListener를 연결해주면 되지 않나요?