列表滚动的动画背景

时间:2014-01-30 13:34:41

标签: android android-animation

我想要实现的是背景图像上的淡入/淡出动画。

我有这样的活动:

<FrameLayout 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"
    tools:context=".DayOverview"
    xmlns:app="http://schemas.android.com/apk/lib/com.google.ads" >

    <ImageView
        android:id="@+id/dayOverviewBg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/bg_home" />

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_alignParentLeft="true" >

        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/dayOverview_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_marginTop="@dimen/px40"
            android:layout_marginRight="@dimen/px20"
            android:layout_marginLeft="@dimen/px20" />

        <com.google.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
            android:id="@+id/dayOverviewAd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:adSize="SMART_BANNER"
            app:adUnitId="xx-xxx-x...xxxxxxxxx" />

    </LinearLayout>

</FrameLayout>

对于ViewPager带有ListView的片段的每个页面,我想要的是当ListView以淡入淡出效果滚动时更改活动中的图像。

我四处寻找类似这样的东西,但我能找到的就是如何在android的主屏幕上制作类似parallax effect的内容。

1 个答案:

答案 0 :(得分:1)

您是否尝试过查看AbsListView.OnScrollListener界面?基本上,每次滚动列表视图时都会触发它。然后,您可以使用getFirstVisiblePosition()方法获取列表中的第一个可见项目,执行计算并最终更改背景。

为了实现切换背景的交叉渐变效果,您可以使用TransitionDrawable

以下是一个例子:

            TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{
                    mLockscreenBg.getDrawable(),    // current background drawable
                    fetchedDrawable                 // new drawable
            });

            mLockscreenBg.setImageDrawable(transitionDrawable);
            mLockscreenBg.setScaleType(ImageView.ScaleType.CENTER_CROP);
            transitionDrawable.setCrossFadeEnabled(true);   // this is optional, but it delivers a better animation
            transitionDrawable.startTransition(mShortAnimDuration);