如何将颜色更改动画赋予自定义形状?

时间:2016-01-24 09:55:01

标签: android animation colors shape

我有一个圆形的自定义形状,我希望它能改变它的颜色,但我得到的形状就像我想要的方形而不是圆形

这是我的形状:

<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid
    android:color="#666666"/>

<size
    android:width="120dp"
    android:height="120dp"/>

在我的布局中:

  <ImageView
    android:id="@+id/rgb_led"
    android:visibility="gone"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:background="@drawable/round_led"
    android:layout_centerHorizontal="true" />  

代码:

 ledImageView.setVisibility(View.VISIBLE);
    int colorFrom = getResources().getColor(colorFromId);
    int colorTo = getResources().getColor(colorToId);
    colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
    colorAnimation.setDuration(duration);
    colorAnimation.setRepeatCount(ValueAnimator.INFINITE);
    colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

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

    });
    colorAnimation.start();  

但我得到一个闪烁的方形而不是圆形!?

编辑:
我实际上想要为圆形图像制作动画,以获得闪烁的彩色光效果,可以改变颜色和闪烁持续时间。
欢呼声。

1 个答案:

答案 0 :(得分:0)

试试这段代码,我在我的应用程序中使用它来显示一个圆形动画循环:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="5"
    android:toDegrees="360" >

<!--    Duration = 1 means that the rotation will be done in 1 second
    increase duration if you want to speed up the rotation-->


<shape
android:innerRadiusRatio="30"
android:shape="ring"
android:thicknessRatio="80"
android:useLevel="false">

<size
    android:height="80dp"
    android:width="80dp" />

<gradient
    android:centerColor="@android:color/transparent"
    android:centerY="0.50"
    android:endColor="#E6E6E6"
    android:startColor="#BEBEBE"
    android:type="sweep"
    android:useLevel="false" />
</shape>

</rotate>

修改1:

您可以使用ProgressBar,更容易实现和通过代码控制:

在xml文件中:

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="bottom|center_horizontal"
        android:visibility="gone"
        android:indeterminate="true" >
    </ProgressBar>
你的* .java文件中的

ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar);
// Control the size
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(80,80);
// Control position
params.gravity = Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL;
// Set new parameters and visibility
progress.setLayoutParams(params);
progress.setVisibility(View.VISIBLE);
// Set Color  
progress.getIndeterminateDrawable().setColorFilter(0xFFFF0000,android.graphics.PorterDuff.Mode.MULTIPLY);