AnimatedVectorDrawable 动画不启动
AnimatedVectorDrawable animation doesn't start
我正在尝试创建一个简单的播放来使用 AnimatedVectorDrawable 在单击时暂停和反转动画。不知何故动画没有开始。
我的代码如下:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private ImageView playPauseImgVw;
private AnimatedVectorDrawable playToPauseAvDrwble;
private AnimatedVectorDrawable pauseToPlayAvDrwble;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playPauseImgVw = (ImageView) findViewById(R.id.activity_main_play_pause_btn_imgVw_id);
playToPauseAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_play_to_pause);
pauseToPlayAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_pause_to_play);
playPauseImgVw.setImageDrawable(playToPauseAvDrwble);
playPauseImgVw.setOnClickListener(newOnClickListener());
}
private View.OnClickListener newOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
morph();
}
};
}
public void morph() {
Log.d(TAG, "start animation");
playToPauseAvDrwble.start();
}
}
transition_pause_to_play.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/path_pause_button"
android:valueTo="@string/path_play_button"
android:valueType="pathType"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
transition_play_to_pause.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/path_play_button"
android:valueTo="@string/path_pause_button"
android:valueType="pathType"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
animated_vector_pause_to_play.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_pause_button">
<target
android:animation="@animator/transition_pause_to_play"
android:name="path_pause_button" />
</animated-vector>
animated_vector_play_to_pause.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_play_button">
<target
android:animation="@animator/transition_play_to_pause"
android:name="path_play_button" />
vector_pause_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp"
android:height="128dp"
android:viewportHeight="600"
android:viewportWidth="600">
<path
android:name="path_name_pause_button"
android:fillAlpha="1"
android:fillColor="@color/color_pause_button"
android:pathData="@string/path_pause_button"
android:strokeColor="@color/color_stroke_pause_button" />
vector_play_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp"
android:height="128dp"
android:viewportHeight="600"
android:viewportWidth="600">
<path
android:name="path_name_play_button"
android:fillAlpha="1"
android:fillColor="@color/color_play_button"
android:pathData="@string/path_play_button"
android:strokeColor="@color/color_stroke_play_button" />
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.merryapps.vectoranimationpoc.MainActivity">
<ImageView
android:id="@+id/activity_main_play_pause_btn_imgVw_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:scaleType="fitCenter"
android:layout_centerHorizontal="true"/>
strings.xml
<resources>
<string name="app_name">VectorAnimationPoc</string>
<string name="path_play_button">M300,70 l 0,-70 95,70 0,0 M300,70 l 95,0 -95,70 0,0 z</string>
<string name="path_pause_button">M365,140 l 30,0 0,-140, -30,0 M300,140 l 30,0 0,-140 -30,0 z</string>
</resources>
我是不是漏掉了什么?
从您 post 编辑的代码来看,除了几个重要的拼写错误外,这似乎大部分都是正确的!
您的 AnimatedVectorDrawable <target>
标签正在寻找名为 "path_play_button" 和 "path_pause_button" 的目标,但在您的 VectorDrawables 中,路径实际上被命名为 "path_name_play_button" 和 "path_name_pause button"。
您没有 post 实际的路径数据,但假设路径兼容,我认为确保这些名称正确匹配应该可以修复它。
我正在尝试创建一个简单的播放来使用 AnimatedVectorDrawable 在单击时暂停和反转动画。不知何故动画没有开始。
我的代码如下:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private ImageView playPauseImgVw;
private AnimatedVectorDrawable playToPauseAvDrwble;
private AnimatedVectorDrawable pauseToPlayAvDrwble;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playPauseImgVw = (ImageView) findViewById(R.id.activity_main_play_pause_btn_imgVw_id);
playToPauseAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_play_to_pause);
pauseToPlayAvDrwble = (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector_pause_to_play);
playPauseImgVw.setImageDrawable(playToPauseAvDrwble);
playPauseImgVw.setOnClickListener(newOnClickListener());
}
private View.OnClickListener newOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
morph();
}
};
}
public void morph() {
Log.d(TAG, "start animation");
playToPauseAvDrwble.start();
}
}
transition_pause_to_play.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/path_pause_button"
android:valueTo="@string/path_play_button"
android:valueType="pathType"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
transition_play_to_pause.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/path_play_button"
android:valueTo="@string/path_pause_button"
android:valueType="pathType"
android:interpolator="@android:interpolator/fast_out_slow_in" />
</set>
animated_vector_pause_to_play.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_pause_button">
<target
android:animation="@animator/transition_pause_to_play"
android:name="path_pause_button" />
</animated-vector>
animated_vector_play_to_pause.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_play_button">
<target
android:animation="@animator/transition_play_to_pause"
android:name="path_play_button" />
vector_pause_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp"
android:height="128dp"
android:viewportHeight="600"
android:viewportWidth="600">
<path
android:name="path_name_pause_button"
android:fillAlpha="1"
android:fillColor="@color/color_pause_button"
android:pathData="@string/path_pause_button"
android:strokeColor="@color/color_stroke_pause_button" />
vector_play_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp"
android:height="128dp"
android:viewportHeight="600"
android:viewportWidth="600">
<path
android:name="path_name_play_button"
android:fillAlpha="1"
android:fillColor="@color/color_play_button"
android:pathData="@string/path_play_button"
android:strokeColor="@color/color_stroke_play_button" />
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.merryapps.vectoranimationpoc.MainActivity">
<ImageView
android:id="@+id/activity_main_play_pause_btn_imgVw_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:scaleType="fitCenter"
android:layout_centerHorizontal="true"/>
strings.xml
<resources>
<string name="app_name">VectorAnimationPoc</string>
<string name="path_play_button">M300,70 l 0,-70 95,70 0,0 M300,70 l 95,0 -95,70 0,0 z</string>
<string name="path_pause_button">M365,140 l 30,0 0,-140, -30,0 M300,140 l 30,0 0,-140 -30,0 z</string>
</resources>
我是不是漏掉了什么?
从您 post 编辑的代码来看,除了几个重要的拼写错误外,这似乎大部分都是正确的!
您的 AnimatedVectorDrawable <target>
标签正在寻找名为 "path_play_button" 和 "path_pause_button" 的目标,但在您的 VectorDrawables 中,路径实际上被命名为 "path_name_play_button" 和 "path_name_pause button"。
您没有 post 实际的路径数据,但假设路径兼容,我认为确保这些名称正确匹配应该可以修复它。