ObjectAnimator usando setters de CharSequence

Estoy jugando con las "nuevas" animaciones de propiedades en Android. Y se encontró con una pared al intentar implementar un ValueAnimator que cambia el texto de un TextView.

Esta es mi lógica de animación (text1 es un TextView)

ValueAnimator textAnim = ObjectAnimator.ofObject(text1, "text", new TypeEvaluator<CharSequence>() { public CharSequence evaluate(float fraction, CharSequence startValue, CharSequence endValue) { if (startValue.length() < endValue.length()) return endValue.subSequence(0, (int) (endValue.length() * fraction)); else return startValue.subSequence( 0, endValue.length() + (int) ((startValue.length() - endValue .length()) * fraction)); } }, start, end); textAnim.setRepeatCount(ValueAnimator.INFINITE); textAnim.setDuration(6000); textAnim.start(); 

Este es el error que 11-22 14:37:35.848: E/PropertyValuesHolder(3481): Couldn't find setter/getter for property text with value type class java.lang.String : 11-22 14:37:35.848: E/PropertyValuesHolder(3481): Couldn't find setter/getter for property text with value type class java.lang.String .

¿Alguien sabe cómo puedo forzar a ObjectAnimator a buscar un setText con un parámetro CharSequence en su lugar?

Es una vieja pregunta y me pregunto si alguien más se topó con este problema. Lo hice hoy. He aquí cómo he creado un trabajo alrededor. Todavía uso ObjectAnimator con una clase de contenedor (que era una pista en la documentación de Android)

Clase de contenedor para TextView:

 private class AnimatedTextView { private final TextView textView; public AnimatedTextView(TextView textView) {this.textView = textView;} public String getText() {return textView.getText().toString();} public void setText(String text) {textView.setText(text);} } 

Con esta clase puede utilizar ObjectAnimator:

  ObjectAnimator.ofObject(new AnimatedTextView((TextView) findViewById(R.id.shortcutLabel)), "Text", new TypeEvaluator<String>() { @Override public String evaluate(float fraction, String startValue, String endValue) { return (fraction < 0.5)? startValue:endValue; } }, "3", "2", "1", "0") .setDuration(3000L) .start(); 

Este fragmento de código realiza una cuenta regresiva de 3 a 0 en 3 segundos.

No he encontrado una manera de hacer que ObjectAnimator funcione con valores de CharSequence.

Sin embargo, he logrado implementar esto sólo con un ValueAnimator estándar en su lugar.

Ejemplo a continuación.

 ValueAnimator textAnimator = new ValueAnimator(); textAnimator.setObjectValues(start, end); textAnimator.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { text1.setText((CharSequence)animation.getAnimatedValue()); } }); textAnimator.setEvaluator(new TypeEvaluator<CharSequence>() { public CharSequence evaluate(float fraction, CharSequence startValue, CharSequence endValue) { if (startValue.length() < endValue.length()) return endValue.subSequence(0, (int) (endValue.length() * fraction)); else return startValue.subSequence( 0, endValue.length() + (int) ((startValue.length() - endValue .length()) * fraction)); } }); textAnimator.setDuration(6000); textAnimator.setRepeatCount(ValueAnimator.INFINITE); textAnimator.start(); 
  • Haga que aparezca un diseño con animación después de hacer clic en el botón en Android
  • Cómo animar una versión 'clonada', duplicada de Android existente View
  • ¿Cómo animar la superposición de una edición de la caja de tabulación en el diseño de Android?
  • Esperar a que la otra vista final de la animación
  • Cómo definir una animación específica de tamaño de pantalla en XML
  • Animación personalizada para Toast entrar / salir?
  • Anima la amplitud del sonido en un CustomView
  • ¿Cómo crear un diseño doblado personalizado con imageview y texto android?
  • El método de animación applyTransformation no se activa hasta que haga clic en cualquier diseño
  • La animación de rotación de Android 4.4 parpadea al animar la vista anidada
  • Android explotar la transición no explode GridView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.