Прокрутите несколько горизонтальных RecyclerView вместе
Я создаю вид, похожий на EPG, для которого у меня есть несколько горизонтальных RecyclerView
s (как телевизионные программы), инкапсулированные в LinearLayout. Когда я прокручиваю один из RecyclerView, я хочу, чтобы остальные виды прокручивались вместе.
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
layoutContent.setWeightSum(epg.getChannels().size());
//prepare recycler views and add into layoutContent based on epg channels
for(EPG.Channel ch : epg.getChannels()){
AppLog.error(TAG, "Creating RecyclerView for: " + ch.getDisplayName());
//create new recycler view
final RecyclerView rv = new RecyclerView(layoutContent.getContext());
lstRecyclerViews.add(rv);
//set layout manager
rv.setLayoutManager(new LinearLayoutManager(layoutContent.getContext(), LinearLayoutManager.HORIZONTAL, false));
//create adapter
rv.setAdapter(new MyAdapter(ch.getPrograms()));
rv.setItemAnimator(new DefaultItemAnimator());
//add into parent layout
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
lp.weight = 1;
layoutContent.addView(rv, lp);
}
}
Я пытался добавить прослушиватель прокрутки к моим представлениям, но я запутался с RecyclerView.OnScrollListener
Это метод onScrolled, так как я не могу понять, как прокручивать другие представления.
Любая помощь / предложение будет полезно.
4 ответа
HorizontelScrollView
{
Линейный макет
{
Вертикальный список горизонтальных представлений переработчика, переопределение горизонтального представления переработчика LayoutManager's
Метод canScroolhorizontally() возвращает false, чтобы они все прокручивались вместе в соответствии с Grand Parent ScrollView.
}
Нашей основной задачей является прокрутка этого вертикального списка горизонтальных видов рециркулятора по горизонтали, сначала я попытался сохранить их все в горизонтальном представлении прокрутки, но это то, что система Android явно отклоняет, поэтому я сохранил одну линейную компоновку (в моем случай вертикально ориентирован) в качестве посредника.
поэтому сетка epg теперь может прокручиваться по вертикали, поскольку они находятся внутри одного вертикального вида рециркулятора, а также по горизонтали из-за горизонтальной прокрутки. и мы не должны разрешать горизонтальную прокрутку списка независимо, поэтому я расширил layoutmanager и запретил горизонтальную прокрутку, теперь они прокручиваются только под grandParent scroll.
Вам необходимо всегда пересчитывать положение текущих предметов в горизонтальных представлениях переработчика (следующий час). После прокрутки за один час пересчитать позиции других на основе небольшого количества движения прокрутки, произошедшего в прикосновении к грн.
Затем переопределить onViewAttachedToWindow
в адаптере и метод использования scrollToPositionWithOffset
от LinearLayoutManager
особенно HRV, чтобы установить его в правильное положение.
Также при расчете движения дх не забудьте отключить onScrolled
метод, когда палец опущен, чтобы избежать многократной обработки одного и того же события.
Вам нужно добавить текстовые представления в горизонтальных рядах. Длина текстового просмотра зависит от продолжительности программы. Я разместил пример проекта на Github. Не стесняйтесь клонировать. https://github.com/xardox69/android_EPG
FlexboxLayout
(сделано Google) позволяет сделать что-то подобное с RecyclerView
и FlexboxLayoutManager
, Начиная с его версии 3.0 (28 июня 2017 года) вы можете перетаскивать его горизонтально.
Для вашего примера используйте это так:
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(getActivity());
layoutManager.setFlexDirection(FlexDirection.ROW);
layoutManager.setFlexWrap(FlexWrap.WRAP);
recyclerView.setLayoutManager(layoutManager);
И не забудьте установить ширину вашего RecyclerView
на большее число, чем размер экрана, для прокрутки не используйте match_parent
:
<android.support.v7.widget.RecyclerView
android:layout_width="3600dp"
android:layout_height="match_parent"/>
Примечание: ViewHolders
перерабатываются по строкам, а не по столбцам, поэтому будьте осторожны, если у вас слишком тяжелые предметы на очень длинных RecyclerView