a

Câu hỏi Kết thúc sự kiện hoạt hình android


Tôi có một hình ảnh động mờ dần trong một chế độ xem (nằm bên trong một đoạn) và mỗi khi hoạt ảnh diễn ra, sau khi nó kết thúc, chế độ xem lại tự vẽ lại. 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 chờ đợi cho các hình ảnh động để 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ì?


77
2017-09-30 06:04


gốc


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


Các câu trả lời:


Bạn có thể thêm Trình nghe hoạt hì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) {
    }
});

147
2017-09-30 06:09



Nếu bạn muốn ngăn chặ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 có đang chạy hay không. - theczechsensation


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 :)


19
2017-09-29 08:35



Rõ ràng và một lớp lót. Câu trả lời hàng đầu! Có thể được đơn giản hóa với việc sử dụng lambda .withEndAction(() -> theView.setVisibility(View.GONE)); - theBugger
chỉ bằng cách này với animate tùy chỉnh ... cảm ơn bro - Dalvinder Singh
Hãy nhớ rằng đây là cấp API 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


Bạn cũng có thể đạt được điều này bằng cách sử dụng Animation.setFillAfter 


8
2017-09-30 09:00



Tôi đã sử dụng nó để giải quyết nó trước đây. - Frank Cheng


Đơn giản chỉ cần lấy đối tượng hoạt hình của bạn và thêm người nghe hoạt hình cho 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**


            }
        });

8
2018-06-03 05:32





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
        }
    })

0
2018-03-27 13:00