안드로이드 개발 질문/답변
(글 수 45,052)
예를 들어 메인뷰에 이미지 버튼이 두개가 있다고 가정했을때
한 버튼을 눌러서 onClick함수가 발동 되었을경우 클릭된 버튼은
((ImageView) v).setImageResource(arr[order_num[0]]); 이런식으로 이미지를 바꾸는것 까지 성공했는데
클릭된 이미지버튼 말고 다른 버튼고 같이 바꾸고 싶은때는 어떻게 해야 할까요??
도와주세요 고수님들~ㅜㅜ
2010.10.30 21:35:05
버튼 두개가 있습니다. 그럼 xml에다가 정의해놓던가 아니면 java 소스에서 동적으로 하겠죠?
xml에 미리 만들어놓은걸로 할께요. xml에 보통
<Button android:id="@+id/btn1"
android:layout_width="wrap_content" ~ 중략~ />
<Button android:id="@+id/btn2"
android:layout_width="wrap_content" ~ 중략~ />
이렇게 정의해 놓았다면
1. class에 implement View.OnClickListener 추가 하고
멤버 변수로 Button btn1, btn2
2. oncreate 함수에
btn1 = (Button)findViewById(R.id.btn1).setOnClickListener(this);
btn2 = (Button)findViewById(R.id.btn2).setOnClickListener(this);
3. 그리고 난 후에 class에 오버라이딩을 합니다.
public void onClick(View v) {
switch(v.getId()) {
R.id.btn1: // 버튼 1이 눌려졌을 경우
btn2.setBackgroundDrawable(getResources().getDrawable(R.drawable.icon)); // 이 부분에서 이렇게 바꾸면 됩니다.
break;
}
}
2010.10.30 21:51:12
ㄱ-;;;
switch 문에
btn2 부분도 추가시켜주셔야죠.....
case R.id.btn1:
// btn1 이벤트 처리
break;
case R.id.btn2:
// btn 2 이벤트 처리
break;
switch 문에
btn2 부분도 추가시켜주셔야죠.....
case R.id.btn1:
// btn1 이벤트 처리
break;
case R.id.btn2:
// btn 2 이벤트 처리
break;
2010.10.30 22:09:04
제 설명이 좀 부족했나 봅니다. 다시 설명드릴께요
ex) 두 이미지버튼중에 둘중 어드것이든 하나가 클릭이 됬을 경우에 두 이미지 다 바뀌어야 되요 그리고
setBackgroundDrawable는 버튼의 배경이 바뀌는것 아닌가요?
btn.setImageResource(~~) 이용하고 싶어요~
onClick안에다가
btn1.setImageResource(~~)
btn2.setImageResource(~~)
이거를 조건없이 실행시키고 싶어요~
2010.10.31 00:36:54
일단 불편하게 느끼셨다면 죄송합니다.
저도 조언을 드리고 싶어서 글을 2,3번 봤지만 뭐라고 할지 모르겠더라구요. 그래서 일단 그렇게 댓글을 달았습니다.질문 자체가 상당히 애매해서 이 글도 답변이 굉장히 길어진 것 같습니다.
질문의 내용이 답변을 하기에 힘들게 되어 있어서 그렇게 충고드린 것입니다.
많이 찾아보고 여러 가지 해보셨다면 그동안 어떤어떤 것을 해보셨는지, 왜 안된다고 생각하시는지.. 뭐 그런것들을 자세히 같이 올리셔야 조언을 드릴 수 있는 거 아닐까 싶네요.
단순히 어떻게 해야 할까요? 라고 하신 부분은 거의 찾아보지 않고, 공부를 안하시고 질문을 올리신 것처럼 보였습니다.
질문 제목이나 내용이나.. 답변 글들을 보니 기초적인 부분도 이해를 잘못하고 계신것 같아서요.
다른 분들도 안드로이드나 Java에 대한 기초적인 질문이 올라오면 책 한권은 정독하거나 검색 해보라고 답변이 많이 합니다.
저도 여기서 많은 답변을 했지만 SmileToday 님 처럼 친절하게 코드까지 다 만들어가면서 일일이 설명드리긴 쉽지 않은 일입니다.
2010.10.30 22:47:54
헐! ㅠㅠ
몇 십 분 동안 삽질 했네요. ㅋㅋㅋ
xml에서 android:="~~~~
이렇게 인가? 정의 해놨더니 오류는 안뜨고 실행시킬때만 계속 오류만 나오네요. ㅋㅋㅋ 그래서 어디야 어디야 하다가 ㅋ
id를 빼먹고
제가 무지했네요.
imageButton이란것이 있었네요.
그것도 마찬가지로 위에
기존에 버튼이랑 마찬가지입니다.
imagebutton이 있다는 것을 몰랐네요. ㅎ
화장실이 급해서 계속 참다가 오기가 생겨서 하다가 ㅎㅎ
오 급하다 화장실좀...
몇 십 분 동안 삽질 했네요. ㅋㅋㅋ
xml에서 android:="~~~~
이렇게 인가? 정의 해놨더니 오류는 안뜨고 실행시킬때만 계속 오류만 나오네요. ㅋㅋㅋ 그래서 어디야 어디야 하다가 ㅋ
id를 빼먹고
제가 무지했네요.
imageButton이란것이 있었네요.
그것도 마찬가지로 위에
public class TestImageBtn extends Activity implements OnClickListener {
private ImageButton imgBtn1, imgBtn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imgBtn1 = (ImageButton)findViewById(R.id.imgBtn1);
imgBtn1.setOnClickListener(this)
imgBtn2 = (ImageButton)findViewById(R.id.imgBtn2);
imgBtn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.imgBtn1:
imgBtn2.setImageResource(R.drawable.icon1);
break;
case R.id.imgBtn2:
imgBtn1.setImageResource(R.drawable.icon2);
break;
}
}
}기존에 버튼이랑 마찬가지입니다.
imagebutton이 있다는 것을 몰랐네요. ㅎ
화장실이 급해서 계속 참다가 오기가 생겨서 하다가 ㅎㅎ
오 급하다 화장실좀...
2010.10.30 23:00:25
SmileToday님 위에 있는 방식으로 했는데요
저는 실행은 되는데 이미지버튼 클릭하자마자 Stopped unexpectely인가요 이경고창 뜨면서 바로 죽어버려요;;
2010.10.30 23:03:58
ddms logcat의 오류가 어떤게 떴는지 볼수 있을까요?
id빼먹어서 오류 났었거든요 ㅋㅋ 지금은 됩니다.
아 그리고 클릭시 오류나는 겁니까?
실행 다 되고 클릭시 오류는 xml작성 시 타이핑 실수나 자원 경로 등이 잘못되었을 싶네요.
id빼먹어서 오류 났었거든요 ㅋㅋ 지금은 됩니다.
아 그리고 클릭시 오류나는 겁니까?
실행 다 되고 클릭시 오류는 xml작성 시 타이핑 실수나 자원 경로 등이 잘못되었을 싶네요.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageButton
android:id="@+id/img_btn1"
android:src="@drawable/icon1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/img_btn2"
android:src="@drawable/icon2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>



클릭 시 클릭 버튼 이미지를 바꾸고 싶다는건가요? 아니면 버튼별로 이벤트를 다르게 두고 싶다는건가요?
아니면 클릭 시 다른 버튼 이미지를 바꾸고 싶다는건가요?
내용을 이해 못하겠네요.
버튼 이미지 바꾸는 것은 setBackgroundResource
이걸로 바꿔보세요.