3

两年以来我一直是 Android 开发人员,但我从未使用过动画。我有一个问题要为我的公司解决:我需要画一个悲伤的笑脸,让他更快乐,同时提高搜索栏的价值,如下图所示。

跟随搜索栏的进度微笑

为了绘制微笑动画,我遵循了关于AnimatedVectorDrawable的 android 文档

但现在动画遵循 3000 毫秒的持续时间,我想用搜索栏控制动画(如视频)。

真的试图在三天内通过互联网找到一些东西,但我想我没有关键词来找到我想要的东西。

我的动画矢量:

<animated-vector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/face" >
    <target
      android:name="mouth"
      android:animation="@animator/smile" />
</animated-vector>

我的矢量图

<vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200dp"
    android:width="200dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
  <path
    android:fillColor="@color/yellow"
    android:pathData="@string/path_circle"/>
  <path
    android:fillColor="@android:color/black"
    android:pathData="@string/path_face_left_eye"/>
  <path
    android:fillColor="@android:color/black"
    android:pathData="@string/path_face_right_eye"/>
  <path
    android:name="mouth"
    android:strokeColor="@android:color/black"
    android:strokeWidth="@integer/stroke_width"
    android:strokeLineCap="round"
    android:pathData="@string/path_face_mouth_sad"/>
</vector>

我的对象动画师

<objectAnimator
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:duration="3000"
  android:propertyName="pathData"
  android:valueFrom="@string/path_face_mouth_sad"
  android:valueTo="@string/path_face_mouth_happy"
  android:valueType="pathType"
  android:interpolator="@android:anim/accelerate_interpolator"/>

我的动画功能

private void animate() {
  Drawable drawable = imageView.getDrawable();
  if (drawable instanceof Animatable) {
    ((AnimatedVectorDrawable) drawable).start();
  }
}

感谢您的帮助。如果您需要有关我的尝试的更多信息,请随时询问。

4

2 回答 2

1

你应该看看RoadRunner,它与 SVG 一起工作,并且允许你手动设置进度。

于 2016-07-24T20:39:39.470 回答
-1

使用 ValueAnimator:

ValueAnimator mProgressAnimator = ValueAnimator.ofInt(progress, 
getMax()).setDuration(timeToEnd);
mProgressAnimator.setInterpolator(new LinearInterpolator());
mProgressAnimator.addUpdateListener(this);
mProgressAnimator.start();

@Override
public void onAnimationUpdate(final ValueAnimator valueAnimator) {
    final int animatedIntValue = (int) 
    valueAnimator.getAnimatedValue();
    setProgress(animatedIntValue);
}
于 2017-12-12T09:51:45.897 回答