Android 在AppCompat v23中禁用ActionMode的动画

Android 在AppCompat v23中禁用ActionMode的动画,android,animation,Android,Animation,在AppCompat的第23版中,它为ActionMode引入了淡入/淡出动画,但我需要禁用它 动机:我改变了表格布局的背景色,但我无法再现完全相同的褪色动画,所以看起来很奇怪。我尝试使用ObjectAnimator,但它并不像新的AppCompat v23中那样是一个合适的“alpha”效果 根据此处(Mattia的回答),动画似乎是从Java创建的(因此不可能覆盖“anim”文件夹中的xml): 你知道如何禁用新的动作模式动画吗 在两种颜色之间复制非常相同的效果对我来说也是一种选择,但是,正

在AppCompat的第23版中,它为ActionMode引入了淡入/淡出动画,但我需要禁用它

动机:我改变了表格布局的背景色,但我无法再现完全相同的褪色动画,所以看起来很奇怪。我尝试使用ObjectAnimator,但它并不像新的AppCompat v23中那样是一个合适的“alpha”效果

根据此处(Mattia的回答),动画似乎是从Java创建的(因此不可能覆盖“anim”文件夹中的xml):

你知道如何禁用新的动作模式动画吗

在两种颜色之间复制非常相同的效果对我来说也是一种选择,但是,正如前面所解释的,它感觉不一样


谢谢,安德里亚,我也有同样的问题。我是这样解决的:

1) 显示actionmode:我没有禁用fadein动画:我只是将actionbar的颜色设置为与actionmode相同的颜色

2) 隐藏操作模式:对于禁用淡入淡出,我只需在onDestroyActionMode中进行此调用:

findViewById(R.id.action_mode_bar).setVisibility(View.INVISIBLE);

别忘了在那之后将“上一个颜色”设置为actionbar。

我也发现了这个问题,我想提出另一个解决方案:尝试设置TabLayout背景颜色更改的动画,与ActionMode同步

    int colorFrom;
    int colorTo;

    TypedValue colorPrimaryTypedValue = new TypedValue();
    TypedValue actionModeBackgroundTypedValue = new TypedValue();
    getActivity().getTheme().resolveAttribute(R.attr.colorPrimary, colorPrimaryTypedValue, true);
    getActivity().getTheme().resolveAttribute(R.attr.actionModeBackground, actionModeBackgroundTypedValue, true);

    if (actionModeVisible) {
        colorFrom = colorPrimaryTypedValue.data;
        colorTo = actionModeBackgroundTypedValue.data;
    } else {
        colorFrom = actionModeBackgroundTypedValue.data;
        colorTo = colorPrimaryTypedValue.data;
    }


    ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
    colorAnimation.setDuration(350); // milliseconds
    colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animator) {
            mTabLayout.setBackgroundColor((int) animator.getAnimatedValue());
        }

    });
    colorAnimation.start();

希望这能帮助别人

自定义视图的解决方案

@Override
public void onDestroyActionMode(ActionMode mode) {
   ((View) mode.getCustomView().getParent()).setVisibility(View.INVISIBLE);
}
启动操作模式时,必须向其传递回调实现。此回调的方法之一是
onDestroyActionMode
。在此方法中,您将收到ActionMode的实例。使用此选项,您可以访问在其上设置的自定义视图并隐藏其父容器

@Override
public void onDestroyActionMode(ActionMode mode) {
   ((View) mode.getCustomView().getParent()).setVisibility(View.INVISIBLE);
}