on
[안드로이드] 뷰커스텀
[안드로이드] 뷰커스텀
개발자가 원하는 기능, 모양을 가진 위젯을 따로 구상해야 할 때는 새로운 뷰나 위젯을 만들어야 함!
일반적으로 API의 뷰를 상속해서 뷰커스텀함!
# 버튼을 커스텀 해보자!
1) 커스텀할 뷰 클래스 만들기 (ex. MyButton.java)
public class MyButton extends AppCompatButton { //원하는 뷰를 상속 public MyButton(Context context) { //소스코드에서 new연산자로 MyButton을 생성했을 때 호출 super(context); init(context); } public MyButton(Context context, AttributeSet attrs) { //XML파일에 태그로 MyButton을 추가했을 때 호출 super(context, attrs); init(context); } private void init(Context context) { //초기화될 때 필요한 코드 setBackgroundColor(Color.CYAN); //뷰의 배경색 설정 setTextColor(Color.BLACK); //뷰의 글자색 설정 float textSize = getResources().getDimension(R.dimen.text_size); //설정한 글자 크기를 픽셀로 변환 setTextSize(textSize); //글자 크기 설정(픽셀 단위만 가능) } @Override protected void onDraw(Canvas canvas) { //새로 정의한 뷰가 화면에 보이기 전에 호출 //버튼 모양을 직접 그릴 때 사용 super.onDraw(canvas); Log.d("MyButton", "onDraw 호출됨"); } @Override public boolean onTouchEvent(MotionEvent event) { //뷰가 터치될 때 호출 Log.d("MyButton", "onTouchEvent 호출됨"); int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: //버튼이 눌렸을 때 setBackgroundColor(Color.BLUE); setTextColor(Color.RED); break; case MotionEvent.ACTION_OUTSIDE: case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: setBackgroundColor(Color.CYAN); setTextColor(Color.BLACK); break; } invalidate(); //뷰를 다시 그려줌 return true; } }
* getResources().getDimension(R.dimen.text_size) 를 쓰기 위해선 res > values > dimens.xml 생성
16sp
2) 커스텀버튼을 사용해보자! (xml파일에서 태그로 추가하기)
* 자바 소스 파일에서 new로도 추가할 수 있음!
출처
Do it! 안드로이드 앱 프로그래밍(개정8판)
from http://uijin.tistory.com/16 by ccl(A) rewrite - 2021-09-07 00:00:54