2012-09-26 57 views
6

Tôi có một ViewFlipper được đặt để tự động lật sau mỗi 5 giây. Rời ra một số chi tiết, nó trông như thế này và hoạt động tốt:Làm cách nào để dừng Android ViewFlipper khỏi vòng lặp?

ViewFlipper flipper = (ViewFlipper) findViewById(R.id.myflipperid); 

flipper.setFlipInterval(5000);        
flipper.setInAnimation(inFromRightAnimation()); 
flipper.setOutAnimation(outToLeftAnimation()); 

flipper.startFlipping(); 

Tuy nhiên, tôi có một trường hợp tôi muốn tự động lật dừng lại ở quan điểm cuối cùng, chứ không phải lặp xung quanh để bắt đầu lại một lần nữa . Có vẻ như ViewFlipper hoặc bất kỳ lớp nào mà nó thừa kế không có phương thức điều khiển vòng lặp.

Làm cách nào để tôi có thể yêu cầu ViewFlipper dừng vòng lặp thông qua chế độ xem con khi lần truy cập cuối cùng?

Lưu ý: câu trả lời được đưa ra here không áp dụng cho trường hợp của tôi, vì tôi cần bắt ViewFlipper ở cuối danh sách, nghĩa là không phụ thuộc vào đầu vào của người dùng. Cảm ơn.

Trả lời

6

Tôi chưa thử bản thân nhưng tôi hy vọng điều này sẽ hữu ích.

Trước tiên, hãy thử nghe sự kiện lật của người xem của bạn. Vì bạn đang sử dụng hoạt ảnh. Bạn có thể sử dụng giải pháp được đăng tại đây: https://stackoverflow.com/a/3813179/1594522

Sau đó, onAnimationEnd(), bạn có thể kiểm tra xem trình xem có ở chế độ xem con cuối cùng không. Nếu nó đã ở chế độ xem con cuối cùng, hãy gọi flipper.stopFlipping().

Hy vọng điều đó sẽ hữu ích! :)

+1

Vâng, đây chính xác là những gì tôi đã làm hôm qua. Bạn đánh tôi bằng cách đăng câu trả lời, vì vậy tôi sẽ cung cấp cho bạn dấu kiểm! Giải pháp thực tế của tôi được đăng bên dưới. – gcl1

0

Chỉ cần có được kích thước của danh sách, và sau đó trong điều kiện if, nói

flipper.stopFlipping() 

Hy vọng nó hoạt động theo cách này.

8

Đây là giải pháp tôi đã sử dụng. Theo đề xuất here, mẹo là lắng nghe sự kiện kết thúc hoạt ảnh, sau đó kiểm tra xem liệu trình kéo có ở chế độ xem cuối cùng hay không.

flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { 

    public void onAnimationStart(Animation animation) {} 
    public void onAnimationRepeat(Animation animation) {} 
    public void onAnimationEnd(Animation animation) { 

     int displayedChild = flipper.getDisplayedChild(); 
     int childCount = flipper.getChildCount(); 

     if (displayedChild == childCount - 1) { 
      flipper.stopFlipping(); 
     } 
    } 
}); 

Cảm ơn câu trả lời của bạn.

+0

"flipperWall" trong ví dụ của bạn là gì? –

+0

Xin lỗi, tôi đã bỏ tờ khai. Trong ví dụ này, flipperWall chỉ là một trình xem flipper, như sau: ViewFlipper flipperWall ;. Bạn cũng sẽ cần phải khởi tạo nó từ một tệp XML, bằng cách sử dụng findViewById() hoặc bằng cách thực hiện nó theo chương trình. Chúc may mắn! – gcl1

+0

Tôi đã chỉnh sửa câu trả lời. Xem bây giờ có ý nghĩa hơn không. –

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