티스토리 뷰

  • 키 입력 이벤트 처리하기
1
2
3
4
뷰를 상속할 때 키 이벤트 처리를 위한 메소드 재정의
- boolean onKeyDown(int keyCode,KeyEvent event)
- boolean onKey(View v, int keyCode, KeyEvent event)
 
cs

  • Example_Event 프로젝트로 이어서 실습 하겠습니다.
1. main.java(시스템,핸드폰에 붙어져있는 키를 눌렀을 때 발생하는 이벤트처리)

generate -> override -> onKeyDown 생성
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.example.example_event;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity {
    TextView textView;
 
    GestureDetector detector;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textView = (TextView) findViewById(R.id.textView);
 
        View view = findViewById(R.id.view1);           // 어차피 View 타입이라 캐스팅 X
 
        view.setOnTouchListener(new View.OnTouchListener() {
            // 움직이는 순간순간을 계속 호출해준다.
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                // 각각의 상태를 getAction으로 가져온다.
                int action = event.getAction();         // 상태 구분자역할
 
                float curX = event.getX();
                float curY = event.getY();
 
                // 터치 했을때
                if(action == MotionEvent.ACTION_DOWN){
                    println("손가락 눌렸음" + curX +"," + curY);
                    // 좌표값도 확인할 수 있는데, 터치가 된곳에
 
                }else if(action == MotionEvent.ACTION_MOVE){        // 터치하고 이동
                    println("손가락 움직임" + curX +"," + curY);
                }else if(action == MotionEvent.ACTION_UP){          // 터치하고 뗐을때
                    println("손가락 떼졌음" + curX +"," + curY);
 
                }
                return true;
 
            }
        });
 
 
        // 제스처를 사용하면 속도나, 좌표값 자동으로 계산해서 넘겨준다.
        detector = new GestureDetector(thisnew GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent motionEvent) {
                println("onDown() 호출됨.");
                return true;
            }
 
            @Override
            public void onShowPress(MotionEvent motionEvent) {
                println("onShowPress() 호출됨.");
 
            }
 
            @Override
            public boolean onSingleTapUp(MotionEvent motionEvent) {
                println("onSingleTapUp() 호출됨.");
                return true;
            }
 
            @Override
            public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                println("onScroll() 호출됨." + v + "," + v1);
                return true;
            }
 
            @Override
            public void onLongPress(MotionEvent motionEvent) {
                println("onLongPress() 호출됨.");
 
            }
 
            @Override
            public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                println("onFling() 호출됨." + v + "," + v1);
                return true;
            }
        });
 
        View view2 = findViewById(R.id.view2);
        view2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });
 
 
    }
 
// 시스템에 붙어있는 키를 눌렀을 때 발생하는 이벤트
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            Toast.makeText(this,"시스템 BACK 버튼 눌림", Toast.LENGTH_LONG).show();
            return true;
        }
 
        return false;
        // 이런식으로 처리를 하게 되면 시스템 백 버튼을 누르게 되어도 바탕화면으로 나가지지않고
        // 다른 기능을 실행시킬 수 있도록 시스템 버튼을 제어 할수 있다.
 
 
    }
 
    public void println(String data){
        textView.append(data + "\n");
    }
}
cs
2. 이제 xml 파일로 이동해서 입력 상자 넣기

background 속성에서 drawble 이미지로 만들수도 있다.
xml 파일로도 설정 할 수 있다.

3. app -> res -> drawble-> 오른쪽 마우스 -> new ->Drawble resource file
생성시킨다 ( my_selector.xml)파일

4. selector은 무엇을 의미하냐?
 상태에 따라 drawble을 보여주려고하는것이 selector이다.

5. 이미지 파일을 red,blue. png파일을 다운받아서 drawablew 폴더에 넣는다

6. 이 이미지 파일들을 배경으로 지정 할 수 있는데, 
1
android:background="@drawable/red"
cs
이런식으로 바꿀 수가 있다.
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
45
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <View
        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_bright" />
 
    <View
        android:id="@+id/view2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/holo_orange_dark" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
 
        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textColor="#000000"
            android:textSize="16dp" />
 
 
    </ScrollView>
 
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/my_selector"
        android:ems="10"
        android:inputType="text"
        android:text="" />
 
</LinearLayout>
cs


  • <결과>
my_selector에의해 상태에 따른 배경이 변화를 바꿀 수 있다.





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함