我正在写一个阅读歌词的活动。当用户点击播放按钮时,必须以用户所需的速度开始垂直滚动动画。用户可能在阅读电话屏幕上的歌词时正在玩guiter。因此,他必须能够根据节奏调整滚动速度。我把歌词textview放在一个ScrollView里面思考,用滚动播放动画。
<ScrollView
android:id="@+id/scrollView_activity_song"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/footer_activity_song"
android:layout_below="@id/title_activity_song">
<TextView
android:id="@+id/lyrics_activity_song"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:elevation="5dp"
android:fontFamily="sans-serif"
android:paddingBottom="5dp"
android:paddingStart="15dp"
android:paddingTop="5dp"
android:textColor="@android:color/black"
android:textSize="14sp" />
</ScrollView>
我已经尝试过以下方式,但我没有达到我的要求。
(1)这个问题是它不会滚动直到歌词的结尾。它只能在其持续时间内工作。
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lyrics.startAnimation((Animation) AnimationUtils.loadAnimation(SongActivity.this,R.anim.scroll_animation));
}
}
scroll_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromYDelta="100"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="infinite"
android:repeatMode="restart"
android:toYDelta="-100" />
(2)有了这个,不能设定任何速度
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(View.FOCUS_DOWN);
}
},100);
}
});
(3)这个只能在持续时间内工作。如果持续时间是问题,还有其他方法吗?用户应该能够看到整个歌词。只有动画速度必须可调。
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObjectAnimator anim = ObjectAnimator.ofInt(scrollView,"scrollY", scrollView.getBottom());
anim.setDuration(9000);
anim.start();
}
});