2010-04-11 34 views
5

Tôi phải tạo hiệu ứng một chế độ xem từ trạng thái A sang B với các thay đổi về tỷ lệ, vị trí và cuộn của nó.Hoạt hình dịch và chia tỷ lệ xem trong Android

Các mã sau gần hiện các trick:

AnimationSet animation = new AnimationSet(true); 

int fromXDelta = view.getScrollX(); 
int fromYDelta = view.getScrollY(); 
view.scrollTo(0, 0); 
float scale = (float) widthB/(float) widthA; 
// Calculate toXDelta and toYDelta 

TranslateAnimation translateAnimation = new TranslateAnimation(-fromXDelta, -toXDelta, -fromYDelta, -toYDelta); 
translateAnimation.setDuration(duration); 
animation.addAnimation(translateAnimation); 

ScaleAnimation scaleAnimation = new ScaleAnimation(1, scale, 1, scale); 
scaleAnimation.setDuration(duration); 
animation.addAnimation(scaleAnimation); 
animation.setAnimationListener(new AnimationListener() { 

    @Override 
    public void onAnimationEnd(Animation arg0) { 
     view.clearAnimation(); 
     // Change view to state B by modifying its layout params and scroll 
    } 

    @Override public void onAnimationRepeat(Animation arg0) {} 
    @Override public void onAnimationStart(Animation arg0) {} 
}); 
view.startAnimation(animation); 

Logic của onAnimationEnd làm cho nhấp nháy xem sau khi các hình ảnh động kết thúc. Ngoài ra nếu tôi không gọi clearAnimation() hoạt ảnh không hoạt động như mong đợi (tại sao?).

Đây có phải là cách phù hợp để thực hiện việc này không?

Cảm ơn!

Trả lời

2

Tôi không biết đó có phải là cách đúng hay không, nhưng tôi đã gặp vấn đề tương tự như bạn. Tôi đã xoay sở để loại bỏ sự nhấp nháy bằng cách thêm một:

animation.reset();

Ngay trước:

view.clearAnimation();

Lưu ý: Trong mã của bạn, nó sẽ là arg0.reset();

1

Bạn đã thử đặt animation.setFillAfter(true)?

Về cơ bản, nó cho phép vị trí/trạng thái mới nhất của chế độ xem của bạn tồn tại khi hoạt ảnh kết thúc, tránh bất kỳ loại nhấp nháy nào.

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