Drag/Drop trong Android Framework cho phép người học android di chuyển dữ liệu từ một View sang View khác trong Layout hiện tại bởi sử dụng một động tác kéo và thả. Như của API 11, hoạt động kéo và thả trên view hoặc view group được hỗ trợ. Framework này cũng bao gồm ba thành phần cơ bản để hỗ trợ tính năng drag và drop, đó là: & drop functionality
- Lớp DragEvent
- Drag listeners:
- Các phương thức và lớp giúp đỡ
Tiến trình Drag/Drop trong Android
Về cơ bản, trong tiến trình Drag/Drop sẽ có 4 bước/trạng thái cơ bản:
- Trạng thái bắt đầu: − Sự kiện này xuất hiện khi bạn bắt đầu kéo một item trong một layout, ứng dụng của bạn gọi phương thức startDrag() để nói cho hệ thống để bắt đầu một Drag. Các tham số bên trong startDrag() cung cấp dữ liệu để được kéo, cung cấp metadata cho dữ liệu này, và cung cấp một hàm callback để vẽ drag shadow (có thể hiểu là bóng kéo).Đầu tiên, hệ thống phản hồi bằng việc gọi lại ứng dụng của bạn để lấy một drag shadow. Sau đó, nó hiển thị drag shadow này trên thiết bị.Tiếp theo, hệ thống gửi một sự kiện kéo (drag event) với kiểu action làACTION_DRAG_STARTED tới các Listener đã đăng ký cho tất cả đối tượng View trong Layout hiện tại.Để tiếp tục nhận các drag event, bao gồm một drop event có thể có, một Listener phải trả về true. Nếu Listener trả về false, thì nó sẽ không nhận các drag event cho hành động hiện tại tới khi hệ thống gửi một drag event với kiểu action là ACTION_DRAG_ENDED.
- Trạng thái tiếp tục: − Người dùng tiếp tục hoạt động kéo. Hệ thống gửi action là ACTION_DRAG_ANTERED được theo sau bởi ACTION_DRAG_LOCATION tới Listener đã đăng ký cho View. Listener có thể chọn để lọc bề mặt đối tượng View của nó để phản hồi sự kiện hoặc có thể phản hồi bằng cách làm nổi bật View đó.Listener nhận một action là ACTION_DRAG_EXITED sau khi người dùng đã di chuyển drag shadow ra ngoài hộp giới hạn của View đó.
- Trạng thái thả: − Người dùng thả item đang kéo bên trong hộp giới hạn của một View. Hệ thống gửi tới Listener của đối tượng View một drag event với kiểu action là ACTION_DROP.
- Trạng thái kết thúc: − Ngay sau ACTION_DROP, hệ thống gửi ra ngoài một drag event với kiểu action là ACTION_DRAG_ENDED để thông báo rằng hoạt động kéo đã xong.
Lớp DragEvent trong Android
Lớp DragEvent biểu diễn một sự kiện được gửi ra bởi hệ thống tại các thời điểm khác nhau trong suốt tiến trình hoạt động kéo và thả. Lớp này cung cấp một số Hằng và các phương thức quan trọng để bạn sử dụng trong tiến trình Drag/Drop.
Hằng trong lớp DragEvent
Bảng dưới liệt kê tất cả hằng số nguyên có sẵn của lớp DragEvent:
Stt. | Constants & Miêu tả |
---|---|
1 | ACTION_DRAG_STARTED
Tín hiệu bắt đầu hoạt động kéo và thả
|
2 | ACTION_DRAG_ENTERED
Tín hiệu thông báo cho một View là điểm kéo đã đi vào hộp giới hạn của View đó
|
3 | ACTION_DRAG_LOCATION
Đượ gửi tới một View sau ACTION_DRAG_ENTERED nếu drag shadow vẫn ở bên trong hộp giới hạn của View đó
|
4 | ACTION_DRAG_EXITED
Tín hiệu thông báo rằng người dùng đã di chuyển drag shadow ra ngoài hộp giới hạn của View
|
5 | ACTION_DROP
Tín hiệu thông báo cho một View rằng người dùng đã thả drag shadow, và điểm kéo là bên trong hộp giới hạn của View
|
6 | ACTION_DRAG_ENDED
Tín hiệu thông báo cho một View là hoạt động kéo và thả đã kết thúc
|
Phương thức trong lớp DragEvent
Dưới đây là một số phương thức quan trọng và thường được sử dụng nhất của lớp DragEvent:
Stt. | Constants & Miêu tả |
---|---|
1 | int getAction()
Kiểm tra giá trị action của sự kiện này
|
2 | ClipData getClipData()
Trả về đối tượng ClipData được gửi tới hệ thống như là một phần của lời gọi tới startDrag()
|
3 | ClipDescription getClipDescription()
Trả về đối tượng ClipDescription được chứa trong ClipData
|
4 | boolean getResult()
Trả về dấu hiệu của kết quả của hoạt động kéo và thả
|
5 | float getX()
Lấy tọa độ X của điểm kéo
|
6 | float getY()
Lấy tọa độ Y của điểm kéo
|
7 | String toString()
Trả về biểu diễn chuỗi của đối tượng DragEvent này
|
Drag Listener trong Android
Nếu bạn muốn bất cứ view nào bên trong một Layout nên phản hồi sự kiện kéo, thì view của bạn: hoặc triển khai View.OnDragListener hoặc thiết lập phương thức callback làonDragEvent(DragEvent) ). Khi hệ thống gọi phương thức hoặc Listener này, nó truyền tới chúng một đối tượng DragEvent được giải thích ở trên. Bạn có thể có cả một Listener và một phương thức callback cho đối tượng View. Nếu điều này diễn ra, đầu tiên hệ thống gọi Listener và sau đó hàm callback đã định nghĩa cũng như Listener này trả về true.
Sự kết hợp của phương thức onDragEvent(DragEvent) và View.OnDragListener là tương tự như kết hợp onTouchEvent() và View.OnTouchListener được sử dụng với sự kiện touch trong các phiên bản Android cũ.
Bắt đầu một sự kiện kéo trong Android
Bạn bắt đầu bằng việc tạo một ClipData và ClipData.Item cho dữ liệu đang được di chuyển. Đối tượng ClipData này cung cấp metadata mà được lưu trữ trong một đối tượngClipMiêu tả bên trong ClipData. Với hoạt động kéo và thả mà không biểu diễn sự di chuyển của dữ liệu, bạn có thể sử dụng null thay vì một đối tượng thực sự.
Tiếp đó, hoặc bạn có thể kế thừa View.DragShadowBuilder để tạo một drag shadow cho hoạt động kéo hoặc đơn giản hơn bạn sử dụng View.DragShadowBuilder(View) để tạo một drag shadow mặc định (cùng kích cỡ như tham số View đã truyền cho nó), với điểm chạm ở giữa drag shadow này.
0 nhận xét:
Đăng nhận xét