티스토리 뷰

  • 화면을 좀더 다양하게 만들 수 있는 방법을 알고 싶다?
1
2
3
4
5
6
7
- 손가락 눌렀을 때 어떻게 처리하는지 안다.
- 사용자에게 간단하게 알려주는 방법을 안다
- 간단한 애니메이션을 넣는 방법을 알아본다.
- 메뉴와 액션바 그리고 탭을 사용하는 방법을 알아본다.
- 프래그먼트에 대해 알아본다
- 화면에 웹브라우저를 포함시키는 방법
- 입력상자를 터치 했을 때 뜨는 키패드 형태를 다르게 만들어 본다.
cs

  • 대표적인 이벤트
1
2
3
4
5
1. 터치 이벤트 - 화면을 손가락으로 누를 때 발생하는 이벤트
2. 키 이벤트 - 키패드나 하드웨어 버튼누를때 발생하는 이벤트
3. 제스처 이벤트 - 테스트 이벤트중 일정 패턴을 만들어 내는 이벤트
4. 포커스 - 뷰마다 순서대로 주어지는 포커스
5. 화면 방향 변경 - 화면의 방향이 가로/세로로 바뀜에 따라 발생하는 이벤트
cs

  • 터치 이벤트 처리하기 예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1. 화면 구성은 어떻게 할까?
constraintLayout -> Text 탭 -> LinearLayout으로 바꿔준다 -> 영역을 세개로 나누어 줄것이다. 상황이 변경시 뿌려주는식으로 할것이다. 이벤트 발생시 ->처리할것.
 
2. LinearLayout은 방향성이 있어야하므로
orientation 속성으로 방향성 처리
 
3. layout_weight = 1로 분할할 것이다.
 
4. id값을 지정한다 @+id/View
이렇게 View를 하나더 생성해서 @+id/View2
 
5 scrollView 생성
마찬가지로 layout_weight = 1로 분할할 것이다.
ScrollView 안에 TextView를 생성해준다.
 
6. 이제 화면이 3분할 된것을 확인 할 수 있다.
 
7. 화면 꾸미기(Backgroud)
cs


8. 이제 Main.java로 가보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.example_event;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
    TextView textView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textView = (TextView) findViewById(R.id.textView);
    }
 
 
 
// 로그 찍기
    public void println(String data){
        textView.append(data + "\n");
    }
}
cs

9. 이제 또 디자인탭에 가서 textsize와 textcolor를 설정 해준다.

10. 이제 이벤트 처리를 해보자. Main.java 파일 (setOnTouchListener)
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
package com.example.example_event;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
    TextView textView;
 
    @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;
 
            }
        });
 
    }
 
    public void println(String data){
        textView.append(data + "\n");
    }
}
cs



<결과>



  • 이벤트 처리가 되면 너무많은 좌표 값이 나온다? 이럴 땐 어떻게 하냐?
1. 제스처 라는것을 사용하면 자동으로 계산되게 해줄 수 있다.

2. main.java 파일 + 추가
(좌표값 찍기)
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
package com.example.example_event;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
 
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;
            }
        });
 
 
    }
 
 
 
    public void println(String data){
        textView.append(data + "\n");
    }
}
cs

  • 결과





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