2014-09-24 22 views
8

Tôi đang cố gắng sử dụng ViewPropertyAnimator để mở rộng chế độ xem (một ProgressBar không xác định) mỗi lần nhấn nút.Android ViewPropertyAnimator không quy mô cùng một lúc

loadingCircle.animate().scaleY(1.5f).scaleX(1.5f).setDuration(100f); 

Tôi có một animatorListener rằng quy mô trở lại bình thường onAnimationEnd:

loadingCircle.animate().scaleY(1.0f).scaleX(1.0f).setDuration(100f); 

Không có gì quá phức tạp. Tuy nhiên, nó không có vẻ quy mô cả x và y cùng một lúc.

Thông thường, lần đầu tiên nó thực hiện lần đầu tiên. Khi nó không hoạt động, nó chỉ làm hoạt hình cuối cùng trong chuỗi. Nếu đó là scaleX, nó sẽ chỉ mở rộng X. Nếu tôi trao đổi xung quanh nó, nó sẽ chỉ quy mô Y.

Tài liệu cho scaleX và scaleY nói:

Ảnh động đã chạy về sở hữu sẽ bị hủy bỏ

Tuy nhiên, tôi nghĩ rằng ViewPropertyAnimator có thể bị xích và nhận xét này chỉ áp dụng cho các hoạt ảnh mới (trên một dòng mã khác). Tôi đang làm điều gì đó sai, hoặc tôi đã tìm thấy một lỗi?

Tôi đang chạy Android 4.2.2 trên GalaxyS4. Stock ROM, nhưng bắt nguồn từ. Nếu điều đó tạo nên sự khác biệt.

+0

nếu tất cả các bạn quan sát là đúng, tôi nghĩ có, bạn có. – mmlooloo

Trả lời

6

Tôi tin rằng đây thực sự là lỗi. Tôi đã làm việc xung quanh điều này bằng cách sử dụng ObjectAnimator thay vì ViewPropertyAnimator để có được kết quả tương tự. Vì vậy, bạn sẽ giống như thế:

ObjectAnimator animX = ObjectAnimator.ofFloat(loadingCircle, "scaleX", 1.0f); 
ObjectAnimator animY = ObjectAnimator.ofFloat(loadingCircle, "scaleY", 1.0f); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(animX, animY); 
animSetXY.start(); 

Nguồn: http://developer.android.com/guide/topics/graphics/prop-animation.html#view-prop-animator

2

Đọc qua mã nguồn hành vi mà bạn mô tả có ý nghĩa hoàn hảo và là do thiết kế. Khi bạn thêm một hoạt ảnh, nó sẽ bắt đầu trên runloop tiếp theo/khi nó có thể. Đôi khi bạn sẽ có thể nhận được cả hai hình ảnh động trong đó trước khi điều này xảy ra, đôi khi bạn sẽ không.

Nếu bạn yêu cầu nó không khởi động hoạt ảnh ngay lập tức, thì bạn sẽ có đủ thời gian để thêm tất cả các hoạt ảnh của mình. Điều này rõ ràng là một chút của một hack.

Bạn có thể thử một cái gì đó như thế này: "đã Tôi tìm thấy một lỗi"

loadingCircle.animate() 
    .setStartDelay(1000) //prevent the animation from starting 
    .scaleY(1.5f) 
    .scaleX(1.5f) 
    .setDuration(100f) 
    .setStartDelay(0) 
    .start(); 
0
AnimatorSet set = new AnimatorSet(); 
     set.setInterpolator(new AccelerateInterpolator()); 
     set.setDuration(100l); 
     view.setPivotX(halfWidth); 
     view.setPivotY(helfHeight); 
     set.play(ObjectAnimator.ofFloat(view, View.SCALE_X, 0f, 1f)) 
       .with(ObjectAnimator.ofFloat(hRippleAdd, View.SCALE_Y, 0f, 1f)); 
     set.start(); 
+0

tốt hơn để giải thích một chút về mã của bạn;) –

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