2010-07-21 45 views
34

Tôi muốn tạo một hoạt ảnh alpha rất đơn giản nhưng tôi không thể tìm thấy một cách hợp lệ.Hoạt ảnh alpha alpha mờ dần với sự chậm trễ

Ý tưởng là để thực hiện hoạt hình này trên một cái nhìn:

  1. alpha 0-1 của 1 giây
  2. giữ alpha tại 1 trong 5 giây
  3. alpha 1-0 của 1 giây
  4. giữ alpha ở 0 trong 5 giây.
  5. bắt đầu một lần nữa trên 1.

Tôi đã cố gắng thực hiện điều đó với một AnimationSet như:

AnimationSet animationSet = new AnimationSet(true); 

Animation animation1 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
animation1.setDuration(1000); 

Animation animation2 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_out); 
animation2.setDuration(1000); 
animation2.setStartOffset(5000); 

Animation animation3 = new AlphaAnimation(0.0f, 0.0f); 
animation3.setDuration(4000) 
animation3.setStartOffset(6000); 

animationSet.add(animation1); 
animationSet.add(animation2); 
animationSet.add(animation3); 

vv ..

nhưng nó seams rằng phim hoạt hình thứ ba làm một mớ hỗn độn với tất cả các hoạt ảnh alpha, tôi cho rằng điều này gây ra sự không thống nhất nội bộ theo cách Android quản lý loại hoạt ảnh này.

Bất kỳ ý tưởng nào?

Cảm ơn bạn.

+0

Bạn có thể vui lòng cho tôi biết nếu mã của tôi hoạt động tốt không? Và hãy chấp nhận câu trả lời nếu có –

Trả lời

101

Giữ Ok ghi nhớ những 2 điểm để giải quyết này


  • Nếu tôi muốn để animate 1.0f to 0.0f sau 5 giây với thời gian hoạt hình của 1 giây, đây là cuối cùng một hình ảnh động 1 giây với một tạm dừng 5 giây.

    Để đạt được điều này:

    1. setDuration(1000) (nó có một khoảng thời gian 1 giây)
    2. setStartOffset(5000) (nó sẽ bắt đầu sau 5 giây)

  • Bạn chỉ cần 2 hoạt ảnh sẽ l oop mãi mãi.

    1. 0.0f to 1.0f với 5 giây tạm dừng và 1 thời gian thứ hai

    2. 1.0f to 0.0f với 5 giây tạm dừng và 1 thời gian thứ hai


Và đây là đoạn code:

animation1 = new AlphaAnimation(0.0f, 1.0f); 
    animation1.setDuration(1000); 
    animation1.setStartOffset(5000); 

    animation2 = new AlphaAnimation(1.0f, 0.0f); 
    animation2.setDuration(1000); 
    animation2.setStartOffset(5000); 

    textView.startAnimation(animation1); 

Tuy nhiên để lặp lại mãi mãi, tôi sẽ sử dụng AnimationListener bởi vì repeatCount là lỗi:

animation1 = new AlphaAnimation(0.0f, 1.0f); 
    animation1.setDuration(1000); 
    animation1.setStartOffset(5000); 

    //animation1 AnimationListener 
    animation1.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      // start animation2 when animation1 ends (continue) 
      textView.startAnimation(animation2); 
     } 

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

     } 

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

     } 

    }); 

    animation2 = new AlphaAnimation(1.0f, 0.0f); 
    animation2.setDuration(1000); 
    animation2.setStartOffset(5000); 

    //animation2 AnimationListener 
    animation2.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      // start animation1 when animation2 ends (repeat) 
      textView.startAnimation(animation1); 
     } 

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

     } 

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

     } 

    }); 

    textView.startAnimation(animation1); 
+0

Câu trả lời hoàn hảo! Cảm ơn rất nhiều! – David

+0

cũng có thể sử dụng để chờ 5 giây và sau đó hiển thị một cái gì đó? để xử lý. – mehmet

14

Có một giải pháp đơn giản hơn cho việc này.

Cho phép giả sử rằng chế độ xem của bạn ở trạng thái GONE. Để hoạt ảnh cho khả năng hiển thị của nó:

yourView.setVisibility(View.VISIBLE); 
yourView.animate().alpha(1).setDuration(300); 

Thông qua cùng cách bạn có thể thêm người nghe hoạt ảnh.

Điều này cũng hoạt động đối với các hoạt ảnh dịch và tỷ lệ.

+1

Rất tốt. Cảm ơn. – paakjis

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