单击后如何更改按钮的文本颜色,并在第二次单击时恢复为默认值?

时间:2017-04-11 07:17:06

标签: java android android-layout

我有一个like按钮,当用户第一次点击时,我想要

1)like按钮的文字颜色变为蓝色

2)另setVisibilityLinearLayout

visible

3)setText到另一个Text小部件到某个字符串。

当用户第二次点击该按钮时,反转到之前的状态。因此,我使用ValueAnimator来检测之前是否点击了按钮并更改了文本的颜色。这很有效,但是当我添加代码来执行上面2和3的操作,ValueAnimator会失效。

这是我的代码

holder.like.setOnClickListener(new View.OnClickListener() {
ValueAnimator buttonColorAnim = null; // to hold the button animator

        @Override
        public void onClick(View v) {
            // first time this will be null
            //here is not the 1st time
            if(buttonColorAnim != null){
                // reverse the color
                buttonColorAnim.reverse();
                // reset for next time click
                buttonColorAnim = null;
               //here set the linear layout gone.
                holder.amountLayout.setVisibility(GONE);


                // add your code here to remove from database
            }
            else {

                //here is 1st time
                final Button button = (Button) v;
                // create a color value animator
                buttonColorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), Color.BLUE, Color.BLACK);
                // add a update listener for the animator.
                buttonColorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animator) {
                        // set the background color
                        button.setTextColor((Integer) animator.getAnimatedValue());
                    }
                });

                // start the animator..
                buttonColorAnim.start();

                //here I do the action 2 and 3
                holder.amountLayout.setVisibility(VISIBLE);
                holder.likeAmount.setText("You liked this!");



                // add your code here to add to database
            }

        }
    });

我得到的是,第一次点击按钮,amountLayout显示,likeAmount文字已设置,但like按钮的颜色保持不变,{{1} }按钮文本颜色仅在第二次单击时更改。 我将输出结果附在下面的图像上

在点击like按钮

之前,这是展望

before clicking the like button

这是第一次点击Like按钮时的展望,假设文字Like应转为Like颜色并显示blue,但现在You liked this文字颜色不会改变。

Like button clicked at the 1st time

这是第二次点击Like按钮时的展望,假设此处文字颜色应为黑色且Like已消失,但现在为You liked this

Like button clicked at 2nd time

有人请帮我看看我的逻辑,并指出我正确的方向。感谢任何帮助。

更新 遵循@ rckrd的解决方案,即在我的代码blue

中添加此行

buttonColorAnim.setDuration(10000)按钮文字颜色不会在第一次点击时立即更改为like,但在第二次点击后仍会保留blue,经过一段时间后,只会更改回到blue

有人可以提供解决方案,文本颜色会在第一次点击按钮或第二次点击按钮时立即改变吗?

1 个答案:

答案 0 :(得分:0)

动画设置为从蓝色变为黑色:

buttonColorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), Color.BLUE, Color.BLACK);

按钮的文本颜色从开始时为黑色,并且由于动画上没有设置持续时间,因此将使用默认持续时间(300毫秒)。因此,您不会看到颜色的任何变化。当动画反转时,文本颜色将从黑色变为蓝色。

如果动画持续时间增加buttonColorAnim.setDuration(10000),您将能够看到文字从蓝色变为黑色。

您也可以使用ObjectAnimator,这样您就不必设置更新监听器。在下面的示例中,文本在1.5秒内从黑色变为蓝色。

buttonColorAnim = ObjectAnimator.ofInt(button,"textColor", Color.BLACK,Color.BLUE);
buttonColorAnim.setEvaluator(new ArgbEvaluator());
buttonColorAnim.setDuration(1500);