일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스낵바
- fit메소드
- 메모리 객체화
- apapter
- score메소드
- predict메소드
- 데이터 전처릴
- LENGTH_INDEFINITE
- hover
- CSS
- 머신러닝
- 외부css
- 버튼 상속
- K최근접이웃 회귀
- Absolute
- 훈련세트
- 선택자 조건
- JavaScript
- HTML
- 레이아웃
- 지도학습
- 테스트세트
- 넘파이
- 웹사이트 공개
- relative
- 스크롤뷰
- kneighbors()
- position
- 픽셀 깨짐
- 표준화 z
- Today
- Total
베짱이와 노는 개미
안드로이드 앱 프로그래밍#10 - 비트맵 버튼 본문
오늘은 비트맵 버튼 만들기에 대해 포스팅해보겠다
일단 비트맵이라는것은
정말 간단하게 표현하자면 이미지포맷이다. 그 예로는 gif, png, jpeg 확장자가 있다.
즉 이미지를 메모리에 저장하는 형태 중 하나가 비트맵이라고 보면 될것같다.
비트맵 버튼이란 비트맵을 이용하여 버튼의 기능을 설정하는것이다.
예를들어 버튼을 눌렀을때의 배경색과 누르지 않았을때의 (기본) 배경색을 다르게 설정하고 싶다면
비트맵기능을 활용할 수 있다.
코드를 보자
package com.example.bitmapbutton;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.appcompat.widget.AppCompatButton;
public class BitmapButton extends AppCompatButton{
public BitmapButton(Context context) {
super(context);
init(context);
}
public BitmapButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context){
setBackgroundResource(R.drawable.title_bitmap_button_normal);
float size = getResources().getDimension(R.dimen.text_size);
setTextSize(size);
setTextColor(Color.WHITE);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch(action) {
case MotionEvent.ACTION_DOWN:
setBackgroundResource(R.drawable.title_bitmap_button_clicked);
break;
case MotionEvent.ACTION_UP:
setBackgroundResource(R.drawable.title_bitmap_button_normal);
break;
}
invalidate();
return true;
}
}
일단 먼저 BitmapButton이라는 이름의 자바 클래스를 하나 create 해준다.
여기서 우리는 버튼 하나를 상속받아서 비트맵버튼을 만들어 볼것이다.
자바에서 상속을 받는다는것에 대해서 설명해보자면
A가 B를 상속받았다. -> A가 B의 속성을 그대로 받아들인 상태에서 코드를 짜겠다.
즉 A는 처음부터 B를 흡수한 상태로 시작하는것이다.
이 코드에서는 BitmapButton이라는 클래스가 AppCompatButton을 상속한것이다
검색을 해보니 AppCompatButton을 상속해야 버튼의 다양한 기능들을 지원받을 수 있다고 한다.
그리고 그 BitmapButton이라는 클래스에 생성자를 선언해줘야 하는데
생성자는 2개이다. xml코드에서 버튼을 끌어다 놓을때 생성되는 생성자와
자바코드에서 직접 버튼을 코딩할때 생성되는 생성자
2가지를 모두 설정해야한다.
그 2가지 생성자 안에 init()메소드를 넣었다.
이제 init 메소드안에 기본배경과 텍스트 크기, 색을 설정해준다.
그리고 이제 그 버튼을 터치했을떄의 이벤트를
onTouchEvent로 설정해준다.
이떄 switch문을 구사했다.
switch문 밑에 invalidate()의 용도는 이미지를 다시 처음으로 돌려놓는(그려놓는)역할이다.
이 invalidate 메소드에 대해서는 추후에 자세히 다룰 예정이다.
자 그럼 이 코드는 버튼하나를 상속받아서 비트맵 버튼을 만든것이고
터치이벤트로 인해서 터치할때 배경색이 변하는 버튼을 만든것이다.
float size = getResources().getDimension(R.dimen.text_size);
이 문장의 뜻은 float로 선언된 변수 size에
res-dimens에서 text size로 지정된 값을 저장해라(size에 16dp를 저장해라) 이런 뜻이다.
이제 우리는 text사이즈를 dimens.xml파일에서 변경할수 있다.
자 그럼 이렇게 dimens.xml파일까지 만들어 놓으면 우리는 BitmapButton 클래스가 완성이 된것이다.
그럼 이 비트맵 클래스를 main.xml파일에 연결을 해줘야한다.
main xml파일을 보면
<BitmapButton>을 추가하면 안되고
패키지 이름까지 같이 써줘야한다.
<com.example.bitmapbutton.BitmapButton> 으로 써주면
Hello World!라는 텍스트를 담은 버튼이 생기고
기본 배경, 터치 시 배경이 저장되어 있는것이다.
이제 에뮬레이터를 실행해보자
기본 화면이다.
이제 저 버튼을 클릭하면 우리가 onTouchEvent에서 설정해준 background 인
title_bitmap_button_clicked 가 보여야 하고 클릭을 뗐을 시에는 다시 기본 배경으로 바껴야한다.
제대로 실행된것이다.
버튼을 상속받는것에 대해서 코드가 조금 어려울수있다.
연습해야겠다.
'안드로이드 앱 프로그래밍' 카테고리의 다른 글
안드로이드 코틀린 til (0) | 2022.03.08 |
---|---|
안드로이드 앱 프로그래밍#11-리스트뷰(list view) (0) | 2021.08.05 |
안드로이드 앱 프로그래밍#9 - 나인패치 이미지 (0) | 2021.07.31 |
안드로이드 앱 프로그래밍#8-대화상자 띄우기 (0) | 2021.07.30 |
안드로이드 앱 프로그래밍#7-스낵바 띄우기 (0) | 2021.07.29 |