RecyclerView 平滑滑动到指定位置
来源:互联网 发布:长沙源码信息骗局 编辑:程序博客网 时间:2024/05/05 16:27
public class MainActivity extends AppCompatActivity implements RecyclerAdapter.OnItemClickListener { private RecyclerView mRecyclerView; private RecyclerAdapter mAdapter; private LinearLayoutManager mLinearLayoutManager; private RadioGroup mRadioGroup; private EditText mEditText; private boolean move = false; private int mIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setAdapter(); initEvent(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview); mRadioGroup = (RadioGroup) findViewById(R.id.radiogroup); mEditText = (EditText) findViewById(R.id.editText); } private void setAdapter() { mLinearLayoutManager = new LinearLayoutManager(this); mAdapter = new RecyclerAdapter(); mRecyclerView.setLayoutManager(mLinearLayoutManager); mRecyclerView.setAdapter(mAdapter); } private void initEvent() { mAdapter.addOnItemClickListener(this); mRecyclerView.addOnScrollListener(new RecyclerViewListener()); } @Override public void onItemClick(View view,int position) { move(position); } public void go(View view){ String str = mEditText.getText().toString(); if (str.equals("")){ Toast.makeText(this,"输入数字",Toast.LENGTH_SHORT).show(); return; } int n = Integer.valueOf(str); move(n); } private void move(int n){ if (n<0 || n>=mAdapter.getItemCount() ){ Toast.makeText(this,"超出范围了",Toast.LENGTH_SHORT).show(); return; } mIndex = n; mRecyclerView.stopScroll(); switch (mRadioGroup.getCheckedRadioButtonId()){ case R.id.scroll: moveToPosition(n); break; case R.id.smoothScroll: smoothMoveToPosition(n); break; } } private void smoothMoveToPosition(int n) { int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition(); int lastItem = mLinearLayoutManager.findLastVisibleItemPosition(); if (n <= firstItem ){ mRecyclerView.smoothScrollToPosition(n); }else if ( n <= lastItem ){ int top = mRecyclerView.getChildAt(n - firstItem).getTop(); mRecyclerView.smoothScrollBy(0, top); }else{ mRecyclerView.smoothScrollToPosition(n); move = true; } } private void moveToPosition(int n) { int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition(); int lastItem = mLinearLayoutManager.findLastVisibleItemPosition(); if (n <= firstItem ){ mRecyclerView.scrollToPosition(n); }else if ( n <= lastItem ){ int top = mRecyclerView.getChildAt(n - firstItem).getTop(); mRecyclerView.scrollBy(0, top); }else{ mRecyclerView.scrollToPosition(n); move = true; } } class RecyclerViewListener extends RecyclerView.OnScrollListener{ @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (move && newState == RecyclerView.SCROLL_STATE_IDLE && mRadioGroup.getCheckedRadioButtonId() == R.id.smoothScroll){ move = false; int n = mIndex - mLinearLayoutManager.findFirstVisibleItemPosition(); if ( 0 <= n && n < mRecyclerView.getChildCount()){ int top = mRecyclerView.getChildAt(n).getTop(); mRecyclerView.smoothScrollBy(0, top); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (move && mRadioGroup.getCheckedRadioButtonId() == R.id.scroll){ move = false; int n = mIndex - mLinearLayoutManager.findFirstVisibleItemPosition(); if ( 0 <= n && n < mRecyclerView.getChildCount()){ int top = mRecyclerView.getChildAt(n).getTop(); mRecyclerView.scrollBy(0, top); } } } }
0 0
- RecyclerView 平滑滑动到指定位置
- Android开发:RecyclerView平滑流畅的滑动到指定位置
- RecyclerView滑动到指定位置
- RecyclerView 滑动到指定位置
- RecyclerView滑动到指定位置
- RecyclerView滑动到指定位置的接口
- RecyclerView的滑动到指定位置
- RecyclerView滑动到指定位置,并指定位置在顶部
- RecyclerView滑动到指定Position
- RecyclerView滚动到指定位置
- RecyclerView定位到指定位置
- RecyclerView滚动到指定位置
- recyclerview,滚到指定位置
- ScrollTo:平滑滚动到页面指定位置
- 点击滑动到指定位置
- RecyclerView实现聊天界面功不能滑动到指定位置问题
- RecyclerView滑动到指定Position的方法
- android listview 滑动到指定位置
- SpringMVC提高篇(三):SpringMVC详细示例实战教程
- shiro 的 授权基本知识
- virtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法
- html的基础
- 关于android annotations使用
- RecyclerView 平滑滑动到指定位置
- maven安装 和 导入 svn
- GCD单例,完整的单例实现
- 前端基础进阶(七):函数与函数式编程
- select,poll,epoll差异
- python自动化测试应用-番外篇--接口测试(一)
- 对于echart的个人使用小结
- Redis教程(三) 散列(HSET)类型
- 摄像头标定简介