我有一个like
按钮,当用户第一次点击时,我想要
1)like
按钮的文字颜色变为蓝色
2)另setVisibility
到LinearLayout
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
按钮
这是第一次点击Like
按钮时的展望,假设文字Like
应转为Like
颜色并显示blue
,但现在You liked this
文字颜色不会改变。
这是第二次点击Like
按钮时的展望,假设此处文字颜色应为黑色且Like
已消失,但现在为You liked this
。
有人请帮我看看我的逻辑,并指出我正确的方向。感谢任何帮助。
更新
遵循@ rckrd的解决方案,即在我的代码blue
buttonColorAnim.setDuration(10000)
按钮文字颜色不会在第一次点击时立即更改为like
,但在第二次点击后仍会保留blue
,经过一段时间后,只会更改回到blue
。
有人可以提供解决方案,文本颜色会在第一次点击按钮或第二次点击按钮时立即改变吗?
答案 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);