2015-04-19 2 views
4

У меня есть горизонтальный RecyclerView в LinearLayout с TextView над ним, как это:Выведение/замирание в 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" /> 

Я хочу TextView постепенно исчезать, когда есть прокрутки влево и первый элемент в RecyclerView выходит из поля зрения. И хотите, чтобы он исчезал во время появления первого элемента (через правую прокрутку). Я знаю, что мне нужно будет использовать addOnScrollChangedListener(), чтобы определить, когда первый элемент recyclerView выходит из поля зрения, то, что я не смог определить, - это способ угасать (или исчезать) TextView с поведением прокрутки.

Вот мой RecyclerView Java сниппает:

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

не SetAlpha() работает? – pskink

+0

@pskink Это то, что я уже пробовал, но он, похоже, не работает. Позвольте мне также попробовать решение Даниэля и посмотреть, работает ли оно –

+0

, его решение неверно, поскольку он использует анимацию, вам нужно настроить альфа-свойство только на основе текущего значения прокрутки, а не на основе начальных значений и текущего времени. – pskink

ответ

4

Edit: @pskink является правильным, анимация не будет работать для данного конкретного случая использования. Использование setAlpha() - единственный способ получить желаемые результаты.

Вы должны поставить это вместе с RecyclerView OnScrollListener

This answer должно помочь вам в этом.

Похоже, самая сложная часть будет определять, в какой именно позиции вы находитесь, в прокрутке, See this question.

Общая структура кода для OnScrollListener, вам, вероятно, придется использовать метод проб и ошибок, чтобы получить значения альфа, набранные в том, где вы хотите:

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; 
     } 
    } 
}); 
Смежные вопросы