2016-02-05 191 views
0

我有一个这样定义的ImageViewAndroid的图标动画改变颜色

<ImageView 
    android:id="@+id/iv_check_simple" 
    android:background="@drawable/ic_check_simple" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" /> 

其中ic_check_simple可绘制的是用彩色#757575材料图标之一。我假装图标的颜色,在用户按ViewGroup(其中ImageView)后,更改为#00ff00

我想用下面的代码来实现这一目标:

int colorFrom = R.color.grey_600; 
int colorTo = R.color.electric_green; 
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); 
colorAnimation.setDuration(250); // milliseconds 
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 

    @Override 
    public void onAnimationUpdate(ValueAnimator animator) { 
    mActivitySelectorIcon.setColorFilter((int) animator.getAnimatedValue(), PorterDuff.Mode.DST_IN); 
    } 
}); 
colorAnimation.start(); 

我相信我已经尝试了所有的PorterDuff模式,但没有成功。

我想这在运行棒棒糖设备的工作和预棒棒堂(minSDK 16)

回答

1

的问题是,你是动画的资源ID,而不是实际的颜色。所以你必须这样做:

int colorFrom = GetResources().GetColor(R.color.grey_600); 
int colorTo = GetResources().GetColor(R.color.electric_green); 
... 
+1

谢谢。解决了。只需要做到这一点,并改变到'PorterDuff.Mode.SRC_ATOP'来实现我的目标。 – Favolas