Tùy thuộc vào cách xem của bạn có được màu nền của nó và cách bạn có được màu mục tiêu của mình, có một số cách khác nhau để làm điều này.
Hai cái đầu tiên sử dụng Hoạt hình thuộc tính Android khung .
Sử dụng Object Animator nếu:
- Chế độ xem của bạn có màu nền được xác định là
argb
giá trị trong tệp xml.
- Chế độ xem của bạn trước đây đã được đặt màu bởi
view.setBackgroundColor()
- Chế độ xem của bạn có màu nền được xác định trong dạng có thể vẽ mà KHÔNG xác định bất kỳ thuộc tính bổ sung nào như bán kính góc hoặc bán kính góc.
- Chế độ xem của bạn có màu nền được xác định trong dạng có thể vẽ và bạn muốn xóa bất kỳ thuộc tính bổ sung nào như đột quỵ hoặc bán kính góc, hãy nhớ rằng việc xóa các thuộc tính bổ sung sẽ không hoạt hình.
Trình hoạt hình đối tượng hoạt động bằng cách gọi view.setBackgroundColor
cái nào thay thế cho drawable được xác định trừ khi nó là một thể hiện của a ColorDrawable
, điều mà nó hiếm khi xảy ra. Điều này có nghĩa là bất kỳ thuộc tính nền bổ sung nào từ một nét vẽ có thể vẽ như đột quỵ hoặc góc sẽ bị xóa.
Sử dụng một Animator giá trị nếu:
- Chế độ xem của bạn có màu nền được xác định trong một hình vẽ có thể đặt các thuộc tính như bán kính góc hoặc bán kính VÀ bạn muốn thay đổi nó thành màu mới được quyết định trong khi chạy.
Sử dụng một Transition drawable nếu:
- Chế độ xem của bạn nên chuyển đổi giữa hai drawable đã được xác định trước khi triển khai.
Tôi đã gặp một số vấn đề về hiệu năng với các bản vẽ Transition chạy trong khi tôi đang mở một Ngăn kéo mà tôi không thể giải quyết, vì vậy nếu bạn gặp phải bất kỳ sự cố nói lắp bất ngờ nào, bạn có thể gặp phải lỗi tương tự như tôi.
Bạn sẽ phải sửa đổi ví dụ Giá trị hoạt hình nếu bạn muốn sử dụng có thể vẽ được StateLists hoặc LayerLists , nếu không nó sẽ bị sập trên final GradientDrawable background = (GradientDrawable) view.getBackground();
dòng.
Đối tượng hoạt hình :
Xem định nghĩa:
<View
android:background="#FFFF0000"
android:layout_width="50dp"
android:layout_height="50dp"/>
Tạo và sử dụng ObjectAnimator
như thế này.
final ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(view,
"backgroundColor",
new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
backgroundColorAnimator.setDuration(300);
backgroundColorAnimator.start();
Bạn cũng có thể tải định nghĩa hoạt hình từ xml bằng cách sử dụng AnimatorInflater giống như XMight trong Android objectAnimator animate backgroundColor of Layout
Nhà hoạt hình giá trị :
Xem định nghĩa:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Định nghĩa có thể vẽ:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
Tạo và sử dụng ValueAnimator như thế này:
final ValueAnimator valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
final GradientDrawable background = (GradientDrawable) view.getBackground();
currentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(final ValueAnimator animator) {
background.setColor((Integer) animator.getAnimatedValue());
}
});
currentAnimation.setDuration(300);
currentAnimation.start();
Chuyển tiếp có thể rút ra :
Xem định nghĩa:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
Định nghĩa có thể vẽ:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
<item>
<shape>
<solid android:color="#78c5f9"/>
<stroke
android:color="#68aff4"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
</transition>
Sử dụng TransitionDrawable như thế này:
final TransitionDrawable background = (TransitionDrawable) view.getBackground();
background.startTransition(300);
Bạn có thể đảo ngược các hình ảnh động bằng cách gọi .reverse()
vào ví dụ hoạt hình.
Có một số cách khác để làm hoạt hình nhưng ba cách này có lẽ là phổ biến nhất. Tôi thường sử dụng ValueAnimator.