마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

롤오버 만들기 질문입니다.

0 추천

 


 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_focused="false" android:state_pressed="true"
  4. android:drawable="@drawable/button_on" />
  5. <item android:drawable="@drawable/button_off" />
  6. </selector>

이제 버튼 컨트롤의 background 속성에 저 XML파일의 id값을 지정해 주면 됩니다.

  1. Button btn = new Button(getApplicationContext());
  2. btn.setBackgroundDrawable(R.drawable.button_bg);  

위와 같은 방법으로 하려면

버튼마다 Selector xml파일이 존재하여야 하는데..

현재 롤오버를 적용해야 할 버튼이 20개입니다.

그럼 위와 같은 방식으로 xml파일을 20개 만들어서 적용하는 방법밖에 없는건가요?

갸아악 (21,260 포인트) 님이 2013년 4월 11일 질문
버튼마다 이미지가 다른가요?
그렇다면 xml을 만들어 적용하는 방법밖에 없습니다.

StateListDrawable로 만들어도 이미지가 다르면 20개 만드셔야죠.
감사합니다~
흑흑 ㅠㅠ

2개의 답변

0 추천
 
채택된 답변
public StateListDrawable setImgChange(Drawable img_01, Drawable img_02) {

  StateListDrawable stateListDrawable = new StateListDrawable();
  stateListDrawable.addState(new int[]{ android.R.attr.state_pressed}, img_02);
  stateListDrawable.addState(new int[]{-android.R.attr.state_pressed}, img_01);

  return stateListDrawable;
 }

 

공통 유틸이나 전역클래스에 저러케 해놓고,  리소스 로드시 밑에와 같이 호출해주면...

xml로 버튼 갯수만큼 떡칠하는거보다 좀 낫지 않을까요

코드를 더 깔끔하게 하려면 이미지 리소스 배열에 원본과, 클릭시 이미지 넣어놓고

반복문으로 잘 돌려보세요...

 

 

버튼1.setBackgroundDrawable(CommonUtil.setImgChange(
          res.getDrawable(R.drawable.bt_common_back),
          res.getDrawable(R.drawable.bt_common_back_c)));
ankarkied (3,210 포인트) 님이 2013년 4월 12일 답변
갸아악님이 2013년 4월 12일 채택됨
0 추천
xml로 selector를 만드나 자바에서 stateListDrawable이나 거기서 거기입니다;;;
갈무리 (12,430 포인트) 님이 2013년 4월 11일 답변
이해가 잘 되지 않습니다.
조금만 더 자세히 설명해 주시면 안될까요?
...