我是Android开发的新手。我正在尝试创建一个自动滚动recyclerview滑块,该滑块还支持用户事件,例如下一个和上一个按钮以及手动滚动。
我已经实现了recyclerview和按钮事件处理,但是我不知道如何实现自动滚动,它只是从位置0滚动到末尾,以及如果用户手动滑动滑块或单击按钮,如何停止自动滚动。
MainActivity.java
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
LinearLayoutManager layoutManager;
HorizontalSliderAdapter recyclerAdapter;
Button btnPrev;
Button btnNext;
Runnable runnable;
Handler handler;
public static final String LOGTAG = "slider";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.horizontal_slider_recyclerview);
setUpRecyclerView();
autoScroll();
}
public void setUpRecyclerView() {
final List<HorizontalSliderModel> RowItems = HorizontalSliderModel.getData();
layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setHasFixedSize(true);
recyclerAdapter = new HorizontalSliderAdapter(this, RowItems);
mRecyclerView.setAdapter(recyclerAdapter);
btnPrev = (Button) findViewById(R.id.bPrev);
btnNext = (Button) findViewById(R.id.bNext);
btnPrev.setOnClickListener(new View.OnClickListener() { …Run Code Online (Sandbox Code Playgroud) 我在列表中有两个值,并使用Recycler视图在水平列表视图中显示它.在这里,我需要自动滚动水平列表无限制.我尝试使用以下代码,但没有结果.
HorizontalScrollView:添加新视图时自动滚动到结束?
回复表示赞赏......
有这样的问题,我有水平RecyclerView,每个单元格小于屏幕宽度。
所以我在这里找到了解决方案
RecyclerVIew 自动滚动以显示新闻提要等中的所有元素,
如果一个单元格占据屏幕的整个宽度,则所有工作都很好,否则(如果每个单元格占据屏幕宽度的 95%),每次自动滑动都将单元格放在屏幕的初学者(右侧)处,这是合乎逻辑的。所以在一个可见单元格的末尾它是另一个单元格的开始
它看起来不太好。我需要这个单元格像这样位于屏幕中间。
我需要查看上一个单元格 - 当前 - 下一个
现在我想解释一些魔法如何使当前平滑滚动(正如我在上面的链接中提到的)
我的这个方法 CustomLinnearLayoutManager
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position)
{
LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext())
{
@Override
public PointF computeScrollVectorForPosition(int targetPosition)
{
return SmoothLayoutManager.this.computeScrollVectorForPosition(targetPosition);
}
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics)
{
return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法可以在没有偏移的情况下工作
我发现了另一种可以提供所需偏移量的方法
scrollToPositionWithOffset(final int position, final int offset)
Run Code Online (Sandbox Code Playgroud)
它看起来正是我所需要的,但是这种方法在没有平滑动画的情况下也能工作。
所以,最终我的问题是:如何将动画逻辑从第一种方法应用到第二种方法(带有偏移量)
随意问