안드로이드 개발 질문/답변
(글 수 45,052)
custom list의 item을 클릭시에 selected, normal 를 구분해서 레이아웃을 변경하고싶습니다.
무슨말이냐면 각 리스트 아이탬에는 텍스트뷰와 그림, 여러 컨트롤들이 있는데요
특정 몇번쨰 아이탬을 누를때(ACTION_DOWN) 컨트롤들의 색깔이나 배경의 변화를 주고
땔때 (ACTION_UP) 컨트롤들의 색깔이나 배경을 다시 원래대로 하려고합니다.
XML의 selector로 변경을 하자니 아이탬의 특정 항목만 변경할수있고
소스에서 하자니 ACTION_DOWN을 하고 다른 아이탬에 손을끌어서 ACTION_ON을하면 해당아이탬은 상태가 누른상태를 유지하고
있습니다. ㅠ
이해하셨을지 모르겠네요 ㅠ
고수님들 부탁드립니다.
무슨말이냐면 각 리스트 아이탬에는 텍스트뷰와 그림, 여러 컨트롤들이 있는데요
특정 몇번쨰 아이탬을 누를때(ACTION_DOWN) 컨트롤들의 색깔이나 배경의 변화를 주고
땔때 (ACTION_UP) 컨트롤들의 색깔이나 배경을 다시 원래대로 하려고합니다.
XML의 selector로 변경을 하자니 아이탬의 특정 항목만 변경할수있고
소스에서 하자니 ACTION_DOWN을 하고 다른 아이탬에 손을끌어서 ACTION_ON을하면 해당아이탬은 상태가 누른상태를 유지하고
있습니다. ㅠ
이해하셨을지 모르겠네요 ㅠ
고수님들 부탁드립니다.
2011.03.02 14:34:59
위의 방법에서 return false 대신 return true를 해주면 되지 않나요?
아니면 ACTION_MOVE를 추가하고, view의 rect를 벗어나면 색을 바꾼다던가..
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
RectF viewRect = new RectF(0, 0, v.getWidth(), v.getHeight());
if(!viewRect.contains(x, y)){
// 원래색으로 돌려놓기
}
break;
..............................................
위 소스는 RectF객체를 너무 자주 생성하는 문제가 있지만;; 대충 이렇게하면 되지 않을까요?
2011.03.02 15:30:14
좀전까지 이거로 고민고민하고 있었는데 딱 질문하셨네요.
저도 아이템 press시 특정 이벤트를 동작시키려고 테스트중이었습니다.
ListView의 dispatchSetPressed를 오버라이딩한 커스텀뷰로 해결했습니다.
class CustomListView extend ListView{
//생성자 생략
@Override
protected void dispatchSetPressed(boolean pressed) { // child의 press 상태를 변경할때 호출됨.
super.dispatchSetPressed(pressed);
for (int i = 0; i < getChildCount() ; i++) {
View child = getChildAt(i);
if(child.isPressed()){
//눌림
}else{
//안 눌림
}
} //for
} //dispatchSetPressed
}// class




textLayout.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case 0:
v.setBackgroundColor(Color.LTGRAY);
break;
default:
v.setBackgroundColor(Color.WHITE);
return false;
}
return false;
}
});