티스토리 뷰
MFC에서 우리가 자주 사용하는 명령으로 메세지 핸들이 있었다.
이것은 사용자가 어떤 액션을 취할 때 마다. (예를들어 어떤 버튼을 클릭한다던지, 키보드의 어떤 키를 누른다던지 하는 등의) 메세지가 발생하여 해당 메세지의 핸들러가 미리 정의해놓은 행동을 하는 것이다.
이것이 안드로이드에도 다른 형태로 존재하는데 이름을 Listener라고 한다.
메세지핸들러와 같이 사용자의 액션이 발생하면 OS가 캐치하여, 듣고 있는 녀석들(리스너)에게 전달을 해주고, 리스너는 등록된 동작을 수행(콜백)하는 형식이라는 점이 MFC의 메세지 핸들과 매우 유사하다고 할 수 있다.
이 리스너를 사용하는 방식에는 크게 6가지 방법이 있다. 순서대로 분류해보자면
1. CALLBACK Method 재정의
2. View가 Listener 구현
3. Activity가 Listener 구현
4. Listener가 인터페이스 구현
5. 익명 내부클래스 사용
6. 익명 내부클래스의 임시 객체 사용
이렇게 6가지 방법이라 할 수 있겠다. 예제를 통하여 하나씩 알아보자.
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 123 124 125 | public class MainActivity extends ActionBarActivity implements View.OnTouchListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int style = LinearLayout.LayoutParams.MATCH_PARENT; LinearLayout.LayoutParams params; params = new LinearLayout.LayoutParams(style,style,1.0f); //-----------------------------------------------------------------// LinearLayout linear = (LinearLayout) findViewById(R.id.linear); View_1 v1 = new View_1(this); View_2 v2 = new View_2(this); View v3 = new View(this); View v4 = new View(this); View v5 = new View(this); View v6 = new View(this); v1.setBackgroundColor(Color.rgb(255, 255, 0)); v2.setBackgroundColor(Color.rgb(255, 0, 255)); v3.setBackgroundColor(Color.rgb(0, 255, 255)); v4.setBackgroundColor(Color.rgb(255, 0, 0)); v5.setBackgroundColor(Color.rgb(0, 255, 0)); v6.setBackgroundColor(Color.rgb(0, 0, 255)); linear.addView(v1); linear.addView(v2); linear.addView(v3); linear.addView(v4); linear.addView(v5); linear.addView(v6); v1.setLayoutParams(params); v2.setLayoutParams(params); v3.setLayoutParams(params); v4.setLayoutParams(params); v5.setLayoutParams(params); v6.setLayoutParams(params); v2.setOnTouchListener(v2); v3.setOnTouchListener(this); v4.setOnTouchListener(new Listener_4()); View.OnTouchListener listener_5; listener_5 = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText(MainActivity.this,"five",Toast.LENGTH_SHORT).show(); return true; } return false; } }; v5.setOnTouchListener(listener_5); v6.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText(MainActivity.this,"six",Toast.LENGTH_SHORT).show(); return true; } return false; } }); } class View_1 extends View { public View_1(Context context) { super(context); } public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ Toast.makeText(MainActivity.this,"one",Toast.LENGTH_SHORT).show(); return true; } return false; } } class View_2 extends View implements View.OnTouchListener{ public View_2(Context context) { super(context); } public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText(MainActivity.this,"two",Toast.LENGTH_SHORT).show(); return true; } return false; } } public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText(MainActivity.this,"three",Toast.LENGTH_SHORT).show(); return true; } return false; } class Listener_4 implements View.OnTouchListener { public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { Toast.makeText(MainActivity.this,"four",Toast.LENGTH_SHORT).show(); return true; } return false; } } } | cs |
주어진 예제는 LinearLayout에 뷰를 추가하여 눌렀을때 각각의 라인에 해당하는 토스트가 떠오르는 예제이다.
참고하여 공부해보자
'안드로이드' 카테고리의 다른 글
안드로이드 : 상단 타이틀바 제거하기 (0) | 2015.06.01 |
---|---|
안드로이드 URL을 통한 HTML 삽입 (0) | 2015.05.19 |
안드로이드 URL을 이용한 비트맵 삽입 (0) | 2015.05.19 |
안드로이드 스케일 타입 예제 (0) | 2015.05.19 |
안드로이드 개요(C/C++과의 차이점) (0) | 2015.05.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 정렬
- 악보
- 클래스
- 티라노 시그널
- C++
- 스레드
- 리눅스
- 소켓 프로그래밍
- 디렉터리
- 안드로이드
- 액터
- C
- 파이썬예제
- C/C++
- 소켓
- socket
- 프로세스
- 쓰레드
- MFC
- 데이터베이스
- 클라이언트
- 라즈베리파이
- 유즈케이스
- 자료구조
- 파이썬
- 티그널
- 터미널
- UML
- 파일
- Sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함