Я пытаюсь преобразовать горизонтальный RecylerView в ViewPager.
(работает как горизонтальный RecylerView, выглядит как ViewPager)
Я работаю над существующим проектом, в котором горизонтальный RecylerView уже используется и отлично работает в соответствии с требованиями, но мне нужно изменить его дизайн, поскольку RecylerView горизонтальный, должен отображаться только один элемент за раз, поэтому для лучшего понимания пользователя мне нужно добавить один линейный макет под элементом, который показывает индикатор (так же, как ViewPager) общего количества элементов в RecylerView. цель индикатора, он показывает текущий существующий элемент в RecylerView.
Мой вопрос: Как получить текущую позицию элемента в индикаторе при прокрутке в горизонтальном просмотре?
Попробуй и ошибись:
Я не знаю, как получить позицию текущего элемента при прокрутке?
(я получаю позицию элемента при нажатии на элемент)
Я могу использовать viewpager вместо горизонтального recylerview, но мне нужно изменить его во многих местах (время и усилия).
(я уже установил индикатор в соответствии с общим элементом, но я не могу получить позицию элемента)
Примечание: одновременно отображается только один элемент
Заранее спасибо.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity"
android:background="#f7eaf9">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fd7d7d">
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:id="@+id/linlay_pager"
android:layout_margin="10dp"
android:layout_below="@+id/recycler_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="horizontal"/>
</RelativeLayout>
MainActivity.java
package com.horizontalrecyclerview;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SnapHelper;
import android.view.Gravity;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private Context mContext;
private Activity mActivity;
private Button pre;
private RelativeLayout mRelativeLayout;
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private RecyclerView.Adapter mAdapter;
private Random mRandom = new Random();
private LinearLayout linlay_pager;
private VectorDrawableCompat mVectorPagerFillCircle;
private VectorDrawableCompat mVectorPagerCircle;
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int receivedColor = intent.getIntExtra("Color", Color.WHITE);
mRelativeLayout.setBackgroundColor(receivedColor);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linlay_pager= (LinearLayout) findViewById(R.id.linlay_pager);
mVectorPagerFillCircle = VectorDrawableCompat.create(getResources(), R.drawable.ic_pager_fill_circle, null);
mVectorPagerCircle = VectorDrawableCompat.create(getResources(), R.drawable.ic_pager_circle, null);
mContext = getApplicationContext();
mActivity = MainActivity.this;
LocalBroadcastManager.getInstance(mContext).registerReceiver(
mBroadcastReceiver,
new IntentFilter("BROADCAST_COLOR")
);
mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
snapHelper.attachToRecyclerView(mRecyclerView);
mLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(mLayoutManager);
List<String> colors = new ArrayList<>();
for (int i = 0; i < 5; i++) {
colors.add(getRandomHSVColor() + "");
}
LinearLayout.LayoutParams imParams = new LinearLayout.LayoutParams(ViewPager.LayoutParams.WRAP_CONTENT, ViewPager.LayoutParams.WRAP_CONTENT);
for (int i = 0; i < 5; i++) {
ImageView mImageCirclePager = new ImageView(this);
if (i == 0) {
mImageCirclePager.setImageDrawable(mVectorPagerFillCircle);
} else {
mImageCirclePager.setImageDrawable(mVectorPagerCircle);
}
linlay_pager.addView(mImageCirclePager, imParams);
}
mAdapter = new ColorsAdapter(mContext, colors);
mRecyclerView.setAdapter(mAdapter);
}
public int getRandomHSVColor() {
int hue = mRandom.nextInt(361);
float saturation = 1.0f;
float value = 1.0f;
int alpha = 255;
int color = Color.HSVToColor(alpha, new float[]{hue, saturation, value});
return color;
}
}