Kết thúc sự kiện hoạt hình android


90

Tôi có một hoạt ảnh mờ dần trong một chế độ xem (nằm bên trong một phân đoạn) và mỗi khi hoạt ảnh xảy ra, sau khi nó kết thúc chế độ xem sẽ tự vẽ lại một lần nữa. Tôi tìm thấy một công việc xung quanh đang làm view.SetVisibility(View.GONE). Nhưng nó không đợi hoạt ảnh kết thúc. Tôi chỉ muốn thực thi mã setVisibility này sau khi hoạt ảnh kết thúc. Cách tốt nhất để làm điều đó là gì?


Gửi mã của bạn như thế nào bạn đang hiển thị các hình ảnh động ....
Lalit Poptani

Câu trả lời:


171

Bạn có thể thêm trình nghe Hoạt ảnh vào đối tượng hoạt ảnh của mình như

anim.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationStart(Animation arg0) {
    }           
    @Override
    public void onAnimationRepeat(Animation arg0) {
    }           
    @Override
    public void onAnimationEnd(Animation arg0) {
    }
});

5
Nếu bạn muốn ngăn hoạt ảnh mờ dần bắt đầu lại trong khi hoạt ảnh đang diễn ra, hãy sử dụng if (!anim.hasStarted() || anim.hasEnded())để phát hiện xem hoạt ảnh vẫn đang chạy hay không.
theczechsensation

34

Về mặt chức năng giống như câu trả lời được chấp nhận nhưng theo cách ngắn gọn hơn nhiều:

                           /* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
    @Override
        public void run() {
            theView.setVisibility(View.GONE);
        }
    });

Thưởng thức :)


2
Rõ ràng và một lớp lót. Câu trả lời hàng đầu! Có thể simplyfied với việc sử dụng lambda.withEndAction(() -> theView.setVisibility(View.GONE));
theBugger

2
Hãy nhớ rằng đây là API cấp 16 (4.1) trở lên.
Tommie

Giải pháp tuyệt vời, bạn của tôi. Cảm ơn bạn!
Vlad Ivchenko

Thông tin quan trọng: - Hành động chỉ được chạy nếu hoạt ảnh kết thúc bình thường, nếu ViewPropertyAnimator bị hủy trong hoạt ảnh đó, chạy được sẽ không chạy.
Sarthak_ssg5 Ngày

Hoạt động giống như một sự quyến rũ, cũng như khi sử dụng thành phần điều hướng trong chạy được. (Trình nghe hoạt ảnh bị lỗi khi tôi đang điều hướng bằng thành phần điều hướng.)
Luigi_Papardelle


9

Chỉ cần lấy đối tượng hoạt ảnh của bạn và thêm trình nghe hoạt ảnh vào nó. Đây là mã ví dụ:

rotateAnimation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub

**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION**


            }
        });

1

Ví dụ cho Kotlin

var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image)
    val fadeOutAnimation = R.anim.fade_out_animation
    val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation)
    fadeOutImage.startAnimation(animation)

    animation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationRepeat(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationEnd(p0: Animation?) {
            fadeOutImage.visibility = View.INVISIBLE
        }
    })

bạn có thể tiết kiệm một số dòng sử dụngfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.