Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何动画ActionBar的ActionMode背景?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_0@
背景

可以更改操作栏的背景,甚至可以在两种颜色之间进行动画处理,如下所示:

public static void animate@R_674_7000@nColors(final ActionBar actionBar,final int colorFrom,final int colorTo,final int durationInMs) {
    final ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(),colorFrom,colorTo);
    colorAnimation.addupdateListener(new AnimatorupdateListener() {
        ColorDrawable colorDrawable = new ColorDrawable(colorFrom);

        @Override
        public void onAnimationupdate(final ValueAnimator animator) {
            colorDrawable.setColor((Integer) animator.getAnimatedValue());
            actionBar.setBACkgroundDrawable(colorDrawablE);
        }
    });
    if (durationInMs >= 0)
        colorAnimation.setDuration(durationInMs);
    colorAnimation.start();
}

问题

我无法找到一种获取动作模式视图的方法,因此我可以在某些情况下更改其背景(当它显示时).

我尝试了什么

我发现的只是一种黑客方式,它假定动作模式的id将保持不变,甚至这只适用于“完成”按钮(看起来像“V”的按钮)的视图实际上更像是“取消”).

我还发现了如何通过主题更改它,但这不是我需要的,因为我需要以编程方式进行.

这个问题

如何获取actionMode的视图,或者更确切地说,如何使用动画更改其背景?

@H_197_21@解决方法

您有两个选择,遗憾的是它们都不涉及本机ActionMode API:

ActionBarContextView负责控制ActionMode

>使用resources.getIdentifier调用Activity.findViewById并传入系统用于ActionBarContextView的ID
>使用反射在ActionBarImpl中访问Field

以下是两者的示例:

使用resources.getIdentifier:

private void animateActionModeViaFindViewById(int colorFrom,int colorTo,int duration) {
    final int aR_708_11845@Id = getresources().getIdentifier("action_contexT_Bar","id","android");
    animateActionMode(findViewById(amId),colorTo,duration);
}

使用反射:

private void animateActionModeViaReflection(int colorFrom,int duration) {
    final ActionBar actionBar = getActionBar();
    try {
        final Field contextView = actionBar.getClass().getDeclaredField("mContextView");
        animateActionMode((View) contextView.get(actionBar),duration);
    } catch (final Exception ignored) {
        // Nothing to do
    }
}
private void animateActionMode(final View actionMode,final int from,int to,int duration) {
    final ValueAnimator va = ValueAnimator.ofObject(new ArgbEvaluator(),from,to);
    final ColorDrawable actionModeBACkground = new ColorDrawable(from);
    va.addupdateListener(new AnimatorupdateListener() {

        @Override
        public void onAnimationupdate(final ValueAnimator animator) {
            actionModeBACkground.setColor((Integer) animator.getAnimatedValue());
            actionMode.setBACkg@R_262_7060@actionModeBACkground);
        }

    });
    va.setDuration(duration);
    va.start();
}

结果

这是一个结果的GIF,从持续时间为2500的Color.bLACK到Color.bLUE:

大佬总结

以上是大佬教程为你收集整理的android – 如何动画ActionBar的ActionMode背景?全部内容,希望文章能够帮你解决android – 如何动画ActionBar的ActionMode背景?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。