반응형

버튼의 모양을 조금 바꾸고 싶어도 버튼에서 사용할 수 있는 속성이 없다면 어떻게 해야 할까요?

버튼을 상속해서 새로운 버튼을 만들면 원하는 기능을 추가할 수 있습니다.

버튼의 배경에 이미지를 넣어주고 이 이미지가 버튼이 터치된 상태에 따라 바뀌도록 만들 수도 있습니다.

새로운 버튼을 만드는 방법을 알아봅시다.


비트맵 버튼

버튼의 배경에 이미지를 설정하고 그 버튼이 눌렸을 때 배경 이미지를 다르게 보여주고 싶다면 버튼을 상속해서 새로운 버튼을 만들 수 있습니다.

터치된 상태에 따라 배경 이미지를 바꾸어주어야 하니 터치 이벤트를 처리하는 방법도 알아야 하죠.

배경 이미지를 바꾸고 나면 바뀐 이미지를 화면에 보여줄 수 있게 화면을 갱신해야 합니다.

이때 invalidate 메소드가 사용됩니다.

Invalidate 메소드를 호출하면 화면을 다시 그리게 되며 추가적으로 그릴 수 있도록 onDraw 메소드도 호출해줍니다.


void onDraw(Canvas):버튼을 상속받아서 다시 그리는기능

void onMeasure():크기를 결정

public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);

int action = event.getAction();

switch (action) {
    case MotionEvent.ACTION_DOWN:
        setBackgroundResource(this.iconClicked);
        break;
    case MotionEvent.ACTION_UP:
        setBackgroundResource(this.iconNormal);
        break;
}

invalidate();

return true;
}

뷰를 상속해서 새로운 뷰를 만든 경우에는 XML 레이아웃에 추가할 때 패키지 명까지 같이 넣어줍니다.

예를 들어, 버튼을 상속해서 비트맵 버튼을 만들었다면 다음과 같이 추가할 수 있습니다.

<org.techtown.bitmapwidget.BitmapButton
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
/>


반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

리스트뷰  (0) 2019.03.05
인플레이션 이해하기  (0) 2019.03.05
나인패치 이미지  (0) 2019.03.05
토스트(Toast)와 알람(alarm)보여주기  (0) 2019.03.04
Event  (0) 2019.03.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기