반응형
버튼의 모양을 조금 바꾸고 싶어도 버튼에서 사용할 수 있는 속성이 없다면 어떻게 해야 할까요?
버튼을 상속해서 새로운 버튼을 만들면 원하는 기능을 추가할 수 있습니다.
버튼의 배경에 이미지를 넣어주고 이 이미지가 버튼이 터치된 상태에 따라 바뀌도록 만들 수도 있습니다.
새로운 버튼을 만드는 방법을 알아봅시다.
비트맵 버튼
버튼의 배경에 이미지를 설정하고 그 버튼이 눌렸을 때 배경 이미지를 다르게 보여주고 싶다면 버튼을 상속해서 새로운 버튼을 만들 수 있습니다.
터치된 상태에 따라 배경 이미지를 바꾸어주어야 하니 터치 이벤트를 처리하는 방법도 알아야 하죠.
배경 이미지를 바꾸고 나면 바뀐 이미지를 화면에 보여줄 수 있게 화면을 갱신해야 합니다.
이때 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 |
최근댓글