Tôi có Chế độ xem OpenGL ES trong Android được điều khiển bởi ma trận để dịch. Im cố gắng tìm ra cách để có được một gợi ý của động lượng cuộn như được thấy trong ứng dụng bản đồ google hoặc iPhone. Cảm ơn.cuộn mượt/cuộn quán tính/đà di chuyển
Trả lời
Nếu vấn đề của bạn là ở 2d, nó là khá đơn giản
- Bạn cần phải nhận được thời gian trôi qua trong mỗi khung
onTouch của bạn chức năng sẽ tìm thấy sự tăng tốc của ngón tay của bạn. Tôi quên công thức về cách tăng tốc từ xa. Nó phải là đạo hàm thứ hai của vị trí với một biến thời gian. Nhưng bạn nên luôn luôn chuyển đổi deltaX của bạn, deltaY trong gia tốc. Để làm cho nó dễ dàng, bạn không thực sự cần phải đặt một cái gì đó chính xác ở đó. Chỉnh sửa: Tôi không biết tại sao tôi không nhìn thấy nó nhưng chức năng là tất cả ở đó ...
acceleration.x = 2 (newposition.x - position.x - speed.x * elapsedTime)/(elapsedTime) * elapsedTime);
Khi bạn đã tăng tốc, bạn có thể đặt vị trí mới của mình bằng mã đó. Đây là động lực vật lý đơn giản trong 2ngày. Với khả năng tăng tốc của bạn, bạn có thể tìm thấy tốc độ của bạn và với tốc độ của bạn, bạn có thể tìm thấy vị trí tiếp theo của bạn.
speed.x = (float) (mass * acceleration.x * elapsed + speed.x); speed.y = (float) (mass * acceleration.y * elapsed + speed.y); position.x += mass * acceleration.x/2 * elapsed * elapsed + speed.x * elapsed; position.y += mass * acceleration.y/2 * elapsed * elapsed + speed.y * elapsed; speed.x *= friction; speed.y *= friction;
Thánh lễ và ma sát sẽ cho phép bạn xác định nhanh như thế nào nó đi và nhanh như thế nào nó sẽ làm chậm của chính nó. Bạn có thể sẽ phải tinh chỉnh mã vì động này không phải là chính xác tốt đẹp nếu bạn phải di chuyển lùi để làm chậm.
Ở cuối mỗi khung, bạn sẽ phải đặt lại gia tốc của mình thành (0,0). Và trên mỗi khung hình mới sau một lần chạm, thậm chí tăng tốc nên được đặt thành thứ gì đó. Nó sẽ hoạt động rất tốt :)
- Đo tốc độ xem đang di chuyển.
- Phát hiện khi người dùng ngừng cuộn.
- Giảm dần tốc độ mà chế độ xem cuộn đang cuộn.
Something như thế này:
public void redraw() {
myScrollView.ySpeed = myScrollView.lastY-myScrollView.y;
myScrollView.xSpeed = myScrollView.lastX-myScrollView.x;
if (!userIsScrolling && ySpeed > 0) {
ySpeed--;
}
if (!userIsScrolling && xSpeed > 0) {
xSpeed--;
}
myScrollView.lastY = myScrollView.y;
myScrollView.y += ySpeed;
myScrollView.lastX = myScrollView.x;
myScrollView.x += xSpeed;
}
public void userStoppedScrolling() {
userIsScrolling = false;
}
cảm ơn, bạn có biết chính xác tôi có thể kiểm soát tốc độ mà người dùng đang di chuyển không? Ngay bây giờ nó chỉ tính toán đồng bằng giữa vị trí bắt đầu và vị trí kết thúc của ngón tay người dùng và sau đó đặt nó vào ma trận. – jfisk
Xin lỗi, tôi không biết Android đủ tốt để trợ giúp các chi tiết cụ thể như vị trí chạm và như vậy. – Jumhyn
- 1. Làm thế nào để đồng bộ hóa độ lệch cuộn của hai phần tử khi di chuyển quán tính
- 2. Tắt hoặc di chuyển thanh cuộn trên HTML
- 3. Ngăn chặn cử chỉ di chuyển qua UIScrollView ngắt cuộn
- 4. Tách và gắn lại trình nghe sự kiện mousewheel không đặt lại quán tính cuộn
- 5. Cuộn quán tính trong Mac OS X bằng Tkinter và Python
- 6. di chuyển ngang UITableView
- 7. Di chuyển trang Android
- 8. Cuộn ngang - Di động - vuốt?
- 9. Cuộn lùi tất cả các đường di chuyển hoặc thả bảng và sửa đổi di chuyển (bắt đầu từ đầu)
- 10. Cách tạo cuộn div cuộn có thể cuộn khi nhấp và di chuột qua jQuery
- 11. Di chuyển hình động
- 12. CSS tàn tật di chuyển
- 13. Di chuyển dọc Parallax
- 14. Tắt di chuyển trên thiết bị di động
- 15. tắt cuộn ngang trên web di động
- 16. Di chuyển lồng nhau trên Android
- 17. Custom View bên HorizontalScrollView không di chuyển
- 18. Di chuyển bảng SWT theo lập trình
- 19. Không thể Di chuyển UIScrollView
- 20. UIScrollView - Di chuyển chế độ xem về phía trước, nhưng bên dưới chỉ báo cuộn
- 21. Làm cách nào để dừng di chuyển trang trong khi .... vẫn cho phép cuộn?
- 22. jQuery cụ cuộn bằng con lăn chuột - di chuyển ONE vị trí và ngăn chặn
- 23. Phát hiện người dùng cuộn xuống hoặc di chuyển lên trong jQuery
- 24. Datatables - Tiêu đề cột không di chuyển khi cuộn theo chiều ngang
- 25. Bạn có thể thay đổi chiều rộng của thanh cuộn (di chuyển DIV) trong IE7
- 26. Bàn phím Di chuyển trên Trường Văn bản Hoạt động - Cuộn xuống Chế độ Ngắm?
- 27. di chuyển ngang cuộn cảm ứng trong các biểu tượng emacs
- 28. Vô hiệu hóa hành vi cuộn dọc của trình di chuyển trong cửa sổ điện thoại
- 29. Cách kéo và di chuyển thứ gì đó và cuộn cùng lúc trong UIScrollView
- 30. Tránh di chuyển safari từ trang cuộn khi textarea tập trung
Đã nhìn vào câu trả lời của bạn và tôi tự hỏi làm thế nào bạn có được tốc độ để sử dụng trong gia tốc khi công thức tốc độ của bạn đòi hỏi acceleratioin ... Một phụ thuộc và yêu cầu khác? – Dan
Thay vì tính tốc độ trực tiếp, nó có thể cho kết quả tốt hơn để sử dụng gia tốc. Tốc độ ban đầu và gia tốc là 0. Vì vậy, bạn phải tiết kiệm tốc độ ở đâu đó để thêm nó vào khung sau đây. Tăng tốc là không có gì khác hơn là sự thay đổi giữa mỗi khung hình. Gia tốc có thể là deltaX, deltaY. Tốc độ thực tế sẽ là deltaX * elapsedTime + lastSpeed. Bằng cách này, tốc độ được tính toán chính xác ngay cả khi khung mất nhiều thời gian hoặc một lượng thời gian nhỏ. Các thông số khác giả mạo một chút vật lý để thêm inerty và ma sát. Bạn không thực sự muốn nó cuộn mãi mãi. –