CHAP 6. 이벤트 처리
입력 위젯 버튼, 텍스트 필드, 체크 박스, 라디오버튼
입력 위젯의 종류
입력 위젯
버튼 텍스트 버튼 이미지 버튼
버튼 텍스트와 이미지를 동시에 가지는 버튼
버튼의 이벤트 처리
이벤트를 처리하는 가장 간단한 방법 레이아웃 안의 <Button> 요소에 onClick 속성을 추 가
<ImageButton> 태그를 사용한 이미지 버튼
이벤트 처리 코드
이미지와 텍스트를 동시에 표시
안드로이드에서의 이벤트 처리 방법 XML 파일에 이벤트 처리 메소드를 등록하는 방법 가장 쉬운 방법 <- 권장 앞에서 살펴보았음! 이벤트 처리 객체를 생성하여 컴포넌트에 등록 일반적인 방법 뷰 클래스의 이벤트 처리 메소드를 재정의 커스텀 뷰를 작성하는 경우: (예) 게임
이벤트 처리 객체 사용 버튼에 붙은 리스너 객체가 이벤트를 처리한다.
이벤트 리스너
리스너의 종류
리스너 객체를 생성하는 방법 리스너 클래스를 내부 클래스로 정의한다. 리스너 클래스를 무명 클래스로 정의한다. 리스너 인터페이스를 액티비티 클래스에 구현한다. 가장 많이 사용되는 방법!
무명 클래스로 이벤트를 처리하는 예제 ... public class ButtonEvent2Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getApplicationContext(), "버튼이 눌려졌습니다", Toast.LENGTH_SHORT).show(); } });
무명 클래스 클래스 몸체는 정의되지만 이름이 없는 클래스이다. 무명 클래스는 클래스를 정의하면서 동시에 객체를 생성하게 된다. 무명 클래스는 클래스를 정의하면서 동시에 객체를 생성하게 된다. class ClickListener implements OnClickListener { ... } obj = new ClickListener(); obj = new OnClickListener() { .... };
코드 분석 무명 클래스 사용 ... public class ButtonEvent2Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getApplicationContext(), "버튼 눌려졌습니다", Toast.LENGTH_SHORT).show(); } });
텍스트 필드 텍스트 필드(text field)를 사용하면 사용자가 앱에 텍스트를 타이핑하여 입력할 수 있다. 단일 라인이거나 멀티 라인일 수 있다.
키보드 종류 지정
에디트 텍스트
에디트 텍스트의 이벤트 처리
체크 박스 XML로 체크 박스를 선언한다.
체크박스의 이벤트 처리
라디오 버튼 XML로 라디오 버튼을 정의한다.
라디오 버튼의 이벤트 처리
토글 버튼 XML로 라디오 버튼을 정의한다.
토글 버튼
레이팅바 XML로 라디오 버튼을 정의한다. ... <RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1.0" />
레이팅바 … public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar); ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { Toast.makeText(getApplicationContext(), "New Rating: " + rating, Toast.LENGTH_SHORT).show(); } }); }
커스텀 컴포넌트 개발자가 직접 View 클래스를 상속받아서 필요한 위 젯을 개발
이벤트 처리 메소드 재정의
재정의할 수 있는 콜백 메소드 onKeyDown(int, KeyEvent) onKeyUp(int, KeyEvent) onTrackballEvent(MotionEvent) onTouchEvent(MotionEvent) onFocusChanged(boolean, int, Rect)
예제
예제
콜백 메소드를 재정의할 때 편리한 기능 [Code]->[Override Methods...] 사용!
터치 이벤트 일반적으로 커스텀 뷰를 정의하고 onTouchEvent() 재정의 class MyView extends View { ... @Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); ... }
터치 이벤트의 종류
터치로 사각형 움직이기
터치 이벤트 예제 public class TouchEventActivity extends Activity { protected class MyView extends View { int x = 100, y = 100; String str; public MyView(Context context) { super(context); setBackgroundColor(Color.YELLOW); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.MAGENTA); canvas.drawRect(x, y, x + 50, y + 50, paint); canvas.drawText("액션의 종류: " + str, 0, 20, paint);
터치 이벤트 예제 @Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_DOWN) str = "ACTION_DOWN"; if (event.getAction() == MotionEvent.ACTION_MOVE) str = "ACTION_MOVE"; if (event.getAction() == MotionEvent.ACTION_UP) str = "ACTION_UP"; invalidate(); return true; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView w = new MyView(this); setContentView(w);
실행결과
터치로 곡선 그리기
터치로 곡선 그리기 #1
터치로 곡선 그리기 #2
터치로 곡선 그리기 #3
실행결과
Lab: 온도 변환기 앱 작성 섭씨 온도를 받아서 화씨 온도로 변환하는 앱을 작 성
핵심 코드