2012-05-16 46 views
22

Tôi muốn di chuyển suôn sẻ đến vị trí cuộn tiếp theo trong chế độ xem tùy chỉnh của tôi (trên nút bấm hoặc sự kiện). Làm thế nào để thực hiện điều này? Trước hết, tôi không thể xem lớp hoạt hình cuộn (chỉ alpha, xoay, chia tỷ lệ và dịch). Thứ hai, có lớp hoạt hình, tôi không thể nhìn thấy lớp lặp lại (nói để cuộn 100 pixel quyền bất kỳ vị trí nào chúng tôi có) chỉ những thuộc tính tuyệt đối (tức là tạo hiệu ứng động từ một giá trị không đổi sang giá trị khác).Làm thế nào để animate vị trí di chuyển? Làm thế nào để di chuyển trơn tru?

Trả lời

35

Giả sử bạn đang sử dụng ScrollView, smoothScrollTo (...) có hoạt động cho bạn không?

http://developer.android.com/reference/android/widget/ScrollView.html#smoothScrollTo%28int,%20int%29

+0

Tôi có nên sử dụng 'ScrollView'? Tôi đang sử dụng 'MyClass mở rộng Chế độ xem 'ngay bây giờ. –

+0

Tôi nghĩ rằng nó phụ thuộc vào những gì bạn đang làm, nếu một ScrollView làm việc cho bạn thì dứt khoát sử dụng nó. –

+0

Tôi đã thử mở rộng 'ScrollView' nhưng thấy rằng' onScrollChanged() 'không được gọi trong trường hợp này. Tôi cần phương pháp này để được gọi kể từ khi tôi tính toán một số thông số trong đó. I E. 'smoothScroll' không hoạt động đối với tôi. –

0

Xem view_cache_demo mẫu mã để xem làm thế nào để làm di chuyển động. Nó hoạt động trong 2D, lưu trữ bản vẽ phức tạp và cũng xử lý các cử chỉ fling, nhưng bạn có thể đơn giản hóa tất cả những gì cần thiết.

1

Animating di chuyển được thực hiện thông qua một sự kết hợp của việc sử dụng Scroller/OverScroller (để tính toán thời gian các giá trị nội suy của offsets cuộn của bạn), GestureDetectors (để bắt đầu các đối tượng cuộn) và phương pháp onComputeScroll của một Xem (đó là vòng lặp hoạt hình của bạn).

Tài liệu android chính thức hiện có hướng dẫn chi tiết về chính xác chủ đề này. http://developer.android.com/training/gestures/scroll.html

22

Sử dụng ObjectAnimator, Đây là một mẫu để di chuyển đến hàng đầu:

public void scroolToTop() { 
      int x = 0; 
      int y = 0; 
    ObjectAnimator xTranslate = ObjectAnimator.ofInt(mScrollView, "scrollX", x); 
    ObjectAnimator yTranslate = ObjectAnimator.ofInt(mScrollView, "scrollY", y); 

    AnimatorSet animators = new AnimatorSet(); 
    animators.setDuration(1000L); 
    animators.playTogether(xTranslate, yTranslate); 
    animators.addListener(new AnimatorListener() { 

     @Override 
     public void onAnimationStart(Animator arg0) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationRepeat(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationCancel(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    animators.start(); 
} 
+0

rất tốt, hoạt động cảm ơn bạn rất nhiều. – Karoly

+0

Hoạt động tuyệt vời! – ventura8

+0

Hoạt ảnh mượt mà hoạt động như một sự quyến rũ! –

Các vấn đề liên quan