【问题标题】:Fade out/fade in TextView based on scroll基于滚动的TextView淡出/淡出
【发布时间】:2015-04-19 06:54:12
【问题描述】:

我在 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() 来确定recyclerView 的第一项何时消失,我无法确定的是一种通过滚动淡出(或淡入)TextView 的方法行为。

这是我的 RecyclerView java sn-p:

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

【问题讨论】:

  • setAlpha() 不工作?
  • @pskink 这是我已经尝试过但似乎没有用的东西。让我也试试丹尼尔的解决方案,看看它是否有效
  • 他的解决方案是错误的,因为他使用动画,您需要设置 alpha 属性仅基于当前滚动值,而不是基于初始值和当前时间
  • @pskink 使用动画对此不起作用?我过去曾将它用于文本淡入/淡出,在这种情况下似乎可以使用。
  • @pskink 好的,所以基本上,在他的解决方案中,一旦我开始动画,我就无法撤消它。我对吗?看看我对他的回答的第一条评论。如果是这种情况,设置 alpha 应该是我需要的修复。抱歉,我之前没有使用过 AlphaAnimation,所以我不知道

标签: android textview fade android-recyclerview


【解决方案1】:

编辑:@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;
         }
     }
});

【讨论】:

  • overallXScroll有什么用?除了设置它的值之外,我没有看到它用于布尔检查?
  • @Vincent_Paing 你是对的,在这个例子中它没有被使用。我想我把它留在那里以防万一有人需要使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2016-03-20
  • 1970-01-01
  • 2019-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多