1. Bitmap button을 사용하는 이유
나인패치(9-patch) 이미지를 적용하는 대표적인 경우가 버튼인데,
배경 부분을 이미지로 지정하여 만든 버튼은 눌러도 이미지의 변화가 없어
사용자가 버튼을 눌렀는지 안 눌렀는지 알 수 없다는 단점이 있다.
비트맵 이미지를 이용하여 버튼의 상태를 이벤트로 구분해 표시할 수 있다.
2. 실행 결과 화면
기본 화면과 터치 시 화면
3. BitmapButton.java
버튼을 상속해서 새로운 버튼을 생성한다.
터치된 상태에 따라 배경 이미지를 바꾸어주기 위해 터치 이벤트를 이용해 처리한다.
invalidate 메소드를 사용하여 바뀐 이미지를 화면을 갱신한다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package com.tistory.qlyh8.pracitice; import android.content.Context; import android.graphics.Color; import android.support.v7.widget.AppCompatButton; import android.util.AttributeSet; import android.view.MotionEvent; 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.btn1); setTextSize(context.getResources().getDimension(R.dimen.text_size)); setTextColor(Color.RED); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action = event.getAction(); switch (action){ case MotionEvent.ACTION_DOWN: setBackgroundResource(R.drawable.btn2); break; case MotionEvent.ACTION_UP: setBackgroundResource(R.drawable.btn1); break; } invalidate(); return true; } } | cs |
4. values/dimens.xml
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">25dp</dimen> </resources> | cs |
5. activity_main.xml
뷰를 상속해서 새로운 뷰를 만든 경우에는 XML 레이아웃에 추가할 때 패키지 명까지 같이 넣어준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="com.tistory.qlyh8.pracitice.MainActivity"> <qlyh8.tistory.com.pracitice.BitmapButton android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout> | cs |
출처: https://www.edwith.org/boostcourse-android/lecture/17055/
'Android' 카테고리의 다른 글
ListView (리스트뷰) (0) | 2018.05.06 |
---|---|
Inflation (인플레이션) (0) | 2018.05.01 |
Nine Patch (나인패치) (0) | 2018.05.01 |
AlertDialog (알림 대화상자) (0) | 2018.04.28 |
Snackbar (스낵바) (0) | 2018.04.28 |