ButtonImg.zip


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

+ Recent posts