如何使用速度可调的动画滚动(从上到下)ScrollView?

时间:2017-03-31 00:52:24

标签: android android-animation android-scrollview

我正在写一个阅读歌词的活动。当用户点击播放按钮时,必须以用户所需的速度开始垂直滚动动画。用户可能在阅读电话屏幕上的歌词时正在玩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();
            }
});

0 个答案:

没有答案