2
我搜索了越來越多,但我還沒有找到任何答案。所以請告訴我如何使用AnimatorInflater.loadStateListAnimator(..)和view.setStateListAnimator(..)方法在前棒棒糖,有沒有什麼辦法來做,而不是那些?Android StateListAnimator在前棒棒糖
我搜索了越來越多,但我還沒有找到任何答案。所以請告訴我如何使用AnimatorInflater.loadStateListAnimator(..)和view.setStateListAnimator(..)方法在前棒棒糖,有沒有什麼辦法來做,而不是那些?Android StateListAnimator在前棒棒糖
StateListAnimator是一個狀態發生變化時啓動的Animator。可以在舊版Android上實現。我正在回收Carbon中的那些內容,但目前該庫僅支持高程動畫。
要實現國家動畫延伸a View,並覆蓋drawableStateChanged:
397 @Override
398 protected void drawableStateChanged() {
399 super.drawableStateChanged();
402 if (stateAnimators != null)
403 for (StateAnimator animator : stateAnimators)
404 animator.stateChanged(getDrawableState());
405 }
然後實現an animator與國家動畫您希望:
23 @Override
24 protected void onPressedChanged() {
25 if (pressed) {
26 setTranslationZ(pressedElevation);
27 } else {
28 setTranslationZ(0);
29 }
30 }
31
32 private void setTranslationZ(float translationZ) {
33 if (view.getTranslationZ() == translationZ || view.getElevation() == 0)
34 return;
35 ValueAnimator animator = ValueAnimator.ofFloat(view.getTranslationZ(), translationZ);
36 animator.setInterpolator(new AccelerateDecelerateInterpolator());
37 animator.setDuration(300);
38 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
39 @Override
40 public void onAnimationUpdate(ValueAnimator animation) {
41 view.setTranslationZ((Float) animation.getAnimatedValue());
42 }
43 });
44 animator.start();
45 }
和簡單state change detector class(超類每個動畫師):
10 public void stateChanged(int[] states) {
11 boolean newPressed = false, newEnabled = false, newChecked = false;
12 for (int state : states) {
13 if (state == android.R.attr.state_enabled) {
14 newEnabled = true;
15 } else if (state == android.R.attr.state_pressed) {
16 newPressed = true;
17 } else if (state == android.R.attr.state_checked) {
18 newChecked = true;
19 }
20 }
21 if (pressed != newPressed) {
22 pressed = newPressed;
23 onPressedChanged();
24 }
25 if (enabled != newEnabled) {
26 enabled = newEnabled;
27 onEnabledChanged();
28 }
29 if (checked != newChecked) {
30 checked = newChecked;
31 onCheckedChanged();
32 }
33 }
讓所有視圖具有正確的狀態動畫是相當複雜和耗時的,但是您可以通過在drawableStateChanged中添加動畫來實現該動畫。
非常感謝你,這是我所尋找的。你可以節省很多時間)) –