基于滚动淡出/淡出TextView

时间:2015-04-19 06:54:13

标签: android textview fade android-recyclerview

我在LinearLayout中有一个水平的RecyclerView,上面有一个TextView,如下所示:

<TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="7dp"
 android:layout_marginLeft="10dp"
 android:layout_marginBottom="7dp"
 android:textColor="#FFa7a7a7"
 android:textSize="15sp"
 android:text="Hello, Android" />

<android.support.v7.widget.RecyclerView
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/recyclerview"
 android:layout_width="match_parent"
 android:layout_height="185dp" />

当有左滚动并且RecyclerView中的第一项不在视图范围内时,我希望TextView淡出。并且只要第一个项目进入视图(通过右滚动),就希望它能够淡入淡出。我知道我将不得不使用addOnScrollChangedListener()来确定recyclelerView的第一项何时不在视野范围内,我无法确定的是淡出(或淡入)TextView的方法滚动行为。

这是我的RecyclerView java片段:

mRecyclerView = (RecyclerView)rootView.findViewById(R.id.recyclerview);
mRecyclerView.setLayoutManager(getLayoutManager());
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(mAdapter);

1 个答案:

答案 0 :(得分:6)

编辑:@pskink是正确的,动画不适用于此特定用例。使用setAlpha()是获得所需结果的唯一方法。

您必须将其与RecyclerView OnScrollListener

放在一起

This answer可以为您提供帮助。

看起来最困难的部分是确定滚动中的位置See this question

OnScrollListener的常规代码结构,您可能需要使用反复试验来获取所需的alpha值:

float alpha = 1.0f;
float newAlpha = 1.0f;
int overallXScroll = 0;

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
         super.onScrolled(recyclerView, dx, dy);

         //use this value to determine left or right scroll
         overallXScroll = overallXScroll + dx;

         //if scroll left
         float newAlpha = alpha - 0.1f;
         if (newAlpha >= 0){
           textView.setAlpha(newAlpha);
           alpha = newAlpha;
         }

         //if scroll right
         float newAlpha = alpha + 0.1f;
         if (newAlpha <= 1){
           textView.setAlpha(newAlpha);
           alpha = newAlpha;
         }
     }
});