2016-01-24 2 views
0

У меня есть круглая заказная фигура, и я хочу, чтобы изменить свой цвет, но я получаю форму в виде квадрата не круглые, как я хочуКак передать анимацию изменения цвета в пользовательскую форму?

Вот моя форма:

<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(); 

но я получаю мигающий квадрат, а не круглую форму !?

EDIT:
На самом деле я хотел бы оживить круглое изображение, чтобы получить эффект мигающего цветного света, который может менять цвета и мигать.
Cheers.

+0

Я предлагаю вам взглянуть на это [ответ] (https://stackoverflow.com/a/3208800/113012) для решения –

ответ

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> 

Edit 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); 
+0

Thanx, но им пытаются использовать ValueAnimator и я могу получить хорошую круглую форму, проблема заключается в том, когда я анимирую ее – Androidy

+0

Добро пожаловать, но могу ли я спросить, что ValueAnimator достигнет более чем объекта? –

+0

1. как реализовать ? 2. Могу ли я управлять этим динамично? старт, стоп? – Androidy

Смежные вопросы