2012-06-19 21 views
10

Tôi gặp sự cố. Tôi muốn tạo hiệu ứng màu nền của một LinearLayout, sử dụng ObjectAnimator.
Vấn đề là nó hoạt hình, nhưng nó không quan tâm đến thời lượng cũng như valueFromvalueTo.Đối tượng AndroidAnimator animate backgroundColor of Layout

Đây là tập tin của tôi xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="2000" 
    android:propertyName="backgroundColor" 
    android:repeatCount="infinite" 
    android:repeatMode="reverse" 
    android:valueFrom="#FF0000" 
    android:valueTo="#000000" /> 

Trong Java tôi gọi như thế này:

ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg); 
objAnim.setTarget(view); 
objAnim.start(); 

Lưu ý rằng khi tôi animate alpha của cách bố trí, nó hoạt động như mong đợi.
Đây có phải là lỗi Android (4.0.3 trên Asus Transformer) hay tôi bỏ lỡ điều gì đó?

+0

Điều gì xảy ra chính xác khi bạn cố gắng làm sống động màu sắc? – DeeV

+0

Tốc độ hoạt ảnh rất nhanh và có vẻ như nền được làm động với tất cả các màu có thể (như màu ngẫu nhiên). Tôi thấy màu xanh, đỏ, xanh lá cây, vàng, mọi thứ và rất nhanh :) – XMight

+0

Điều này không thành công vì giữa "số" 0xFF0000 và 0x000000 cũng có các màu chính khác 0x00FF00 và 0x0000FF, và khá nhiều màu khác. Đặt máy tính để bàn của bạn thành lập trình viên/thập lục phân và bạn sẽ thấy rằng một nửa màu đỏ thực sự là màu vàng đậm thay vì màu đỏ đậm. – Combuster

Trả lời

37

Tôi googled một chút. Có một câu trả lời. Hãy thử sử dụng TransitionDrawable. http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

Ngoài ra, có một chủ đề ở đâu đó trên stackoverflow.com dành riêng cho cùng một vấn đề.

thêm mã ví dụ:

Button btn = (Button)this.findViewById(R.id.btn1); 
    //Let's change background's color from blue to red. 
    ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)}; 
    TransitionDrawable trans = new TransitionDrawable(color); 
    //This will work also on old devices. The latest API says you have to use setBackground instead. 
    btn.setBackgroundDrawable(trans); 
    trans.startTransition(5000); 
+0

Cảm ơn rất nhiều, nó hoạt động! – KinGPinG

+0

cảm ơn bạn !!!! chỉ muốn làm một pop để màu bg mới trên textview và mờ dần trở lại màu đen khi thay đổi. đã thử tất cả các hoạt ảnh khác. ngay cả một phiên bản khai báo của TransitionDrawable. cái này đã hoạt động))) – tom

+0

cảm ơn! hữu ích +1 –

12

Nó có vẻ là một vấn đề cũ. Tôi vấp vào câu hỏi này trong khi có một vấn đề tương tự.

Cuối cùng, đó chỉ là lỗi trong Android. Mã được cho là hoạt động, nhưng AnimatorInflater chỉ là những sai lầm khi thiết lập bộ đánh giá.

Vì vậy, đặt TypeEvaluator sau khi lạm phát một lần nữa sẽ thực hiện thủ thuật.

ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg); 
    objAnim.setTarget(view); 
    objAnim.setEvaluator(new ArgbEvaluator()); 
    objAnim.start(); 

Đặt hoạt ảnh thành new ArgbEvaluator() hoạt ảnh hoạt động như dự định.

+0

câu trả lời này nên được gắn cờ là câu trả lời thực tế bởi vì nó giải quyết câu hỏi ban đầu trong khi câu trả lời của user1415536 ​​sử dụng một cách tiếp cận thay thế với các đối tượng cũ hơn. – ema3272

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