Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pre Lollipop中的android StateListAnimator_Android_Material Design - Fatal编程技术网

pre Lollipop中的android StateListAnimator

pre Lollipop中的android StateListAnimator,android,material-design,Android,Material Design,我搜索了越来越多,但没有找到任何答案。因此,请告诉我如何使用AnimatorInflater.loadStateListAnimator(…)和view.setStateListAnimator(…)方法在棒棒糖制作前,有什么方法可以代替这些方法吗?StateListAnimator是一个在状态发生变化时启动的动画师。在旧版本的Android上实现这一点是可能的。我正在进行中的后移植,但现在库只支持立面动画 要实现状态animator extend和override drawableStateC

我搜索了越来越多,但没有找到任何答案。因此,请告诉我如何使用AnimatorInflater.loadStateListAnimator(…)view.setStateListAnimator(…)方法在棒棒糖制作前,有什么方法可以代替这些方法吗?

StateListAnimator是一个在状态发生变化时启动的动画师。在旧版本的Android上实现这一点是可能的。我正在进行中的后移植,但现在库只支持立面动画

要实现状态animator extend和override drawableStateChanged,请执行以下操作:

然后使用希望具有的状态动画实现:

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     } 
和一个简单的(每个动画师的超类):


为所有视图提供正确的状态动画非常复杂和耗时,但您可以通过在drawableStateChanged中添加动画来实现这一点

非常感谢,这是我一直在寻找的。你节省了我很多时间
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     } 
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     }