CHƯƠNG II : TÌM HIỂU HỆ ĐIỀU HÀNH ANDROID
2.6.5 Phương thức onTouchEvent(MotionEvent event)
Mỗi hành động vẽ của ta sẽ bắt đầu khi ta chạm tay vào màn hình, di chuyển trên màn hình và kết thúc khi ta nhấc tay lên. Vì thế tương ứng với ba hành động đó ta cần xây dựng các phương thức phù hợp để thực hiện những công việc ta cần làm. Trong lớp MyView ta cần ghi đè lại phương thức onTouchEvent(MotionEvent event),
phương thức này sẽ bắt các sự kiện khi tay ta chạm vào màn hình : @Override
public boolean onTouchEvent(MotionEvent event) { switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
// các công việc cần thực hiện khi tay ta chạm vào màn hình
break;
case MotionEvent.ACTION_MOVE:
// các công việc cần thực hiện khi tay ta di chuyển trên màn hình
break;
case MotionEvent.ACTION_UP:
//các công việc cần thực hiện khi tay ta nhấc lên khỏi màn hình
break; }
return true; }
Ứng với mỗi hành động trên, có thể có nhiều công việc để lựa chọn thực hiện vì thế ta không thể đưa trực tiếp vào phương thức trên vì sẽ gây ra khó khăn trong việc quản lý và sửa đổi. Vì thế ta sẽ tạo thêm ba phương thức :
private void touch_start(float x, float y): thực hiện các công việc khi chạm tay vào màn hình
private void touch_move(float x, float y): thực hiện các công việc khi di chuyển tay trên màn hình
private void touch_up():thực hiện các công việc khi nhấc tay lên khỏi màn hình
Khi chạm tay vào màn hình hoặc khi tay ta di chuyển trên màn hình ta cần xác định được tọa độ của điểm tay ta đang chạm vào, việc xác định tọa độ này nhằm giúp cho ta vẽ các hình cần thiết lên ngay điểm ta chạm vào, chính vì thế trong các phương thức touch_start() và touch_move() ta cần truyền vào 2 tham số float x, float y. Để xác định được tọa độ điểm ta đang chạm vào trong phương thức onTouchEvent(MotionEvent event)ta gọi phương thức getX(), getY() của tham số event:
float x = event.getX(); float y = event.getY();
Như đã đề cập bên trên, mỗi khi ta vẽ một cái gì đó và muốn hiển thị lên màn hình thì ta phải gọi lại phương thức onDraw(Canvas canvas), để gọi phương thức này ta dùng phương thức invalidate()
@Override
public boolean onTouchEvent(MotionEvent event) { float x = event.getX();
float y = event.getY(); switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: touch_start(x,y);
invalidate(); break;
case MotionEvent.ACTION_MOVE: touch_start(x,y);
invalidate(); break;
case MotionEvent.ACTION_UP: touch_start(x,y); invalidate(); break; } return true; }