Android - 回到顶部实现
2016-07-22 11:58
399 查看
实现思路 - ScrollView
设置ScrollView的Touch监听事件的,获取滑动距离当它滑出一定距离后,我们才显示回到顶部按钮
点击回到顶部按钮,ScrollView、ListVie 滑到顶部
隐藏回到顶部按钮。
以上步骤进入循环
实现代码 - ScrollView
Xml 布局文件编写回到顶部按钮并设置为Invisiable设置ScrollView 的Touch监听
//设置ScrollView OnTouch监听 mScrollView.setOnTouchListener ( new View.OnTouchListener ( ) { private int lastY = 0; private int touchEventId = - 9983761; Handler handler = new Handler ( ) { @Override public void handleMessage ( Message msg ) { super.handleMessage ( msg ); View scroller = ( View ) msg.obj; if ( msg.what == touchEventId ) { if ( lastY == scroller.getScrollY ( ) ) { handleStop ( scroller ); } else { handler.sendMessageDelayed ( handler.obtainMessage ( touchEventId, scroller ), 5 ); lastY = scroller.getScrollY ( ); } } } }; public boolean onTouch ( View v, MotionEvent event ) { //触摸后-手抬起 if ( event.getAction ( ) == MotionEvent.ACTION_UP ) { handler.sendMessageDelayed ( handler.obtainMessage ( touchEventId, v ), 5 ); } return false; } /** * ScrollView 停止 */ private void handleStop ( Object view ) { ScrollView scroller = ( ScrollView ) view; scrollY = scroller.getScrollY ( ); // 底部判断 if ( mContent != null && mContent.getMeasuredHeight ( ) <= mScrollView.getScrollY ( ) + mScrollView.getHeight ( ) ) { mGoTop.setVisibility ( View.VISIBLE ); } // 顶部判断 else if ( mScrollView.getScrollY ( ) == 0 ) { } //滑出顶部30 else if ( mScrollView.getScrollY ( ) > 30 ) { mGoTop.setVisibility ( View.VISIBLE ); } } } );
监听 回到顶部按钮的点击事件
@OnClick ( R.id.home_to_top ) public void clickEvent ( View view ) { switch ( view.getId ( ) ) { case R.id.home_to_top: mScrollView.post ( new Runnable ( ) { @Override public void run ( ) { mScrollView.fullScroll ( ScrollView.FOCUS_UP ); } } ); mGoTop.setVisibility ( View.INVISIBLE ); break; } }
实现思路 - ListView
设置ListView的OnScrollListenerListView的firstVisibleItem!=0,我们显示回到顶部按钮
点击回到顶部按钮,ListView 滑到第一项
隐藏回到顶部按钮。
以上步骤进入循环
实现代码 - ListView
Xml 布局文件编写ListView的回到顶部按钮并设置为Invisiable设置ListView的OnScrollListener
mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) {} /** * firstVisibleItem:当前能看见的第一个列表项ID(从0开始) * visibleItemCount:当前能看见的列表项个数(小半个也算) totalItemCount:列表项共数 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem !=0) { toTopBtn.setVisibility(View.VISIBLE); } else { toTopBtn.setVisibility(View.GONE); } } } }); /** * 滚动ListView到指定位置 * */ private void setListViewPos(int pos) { if (android.os.Build.VERSION.SDK_INT >= 8) { listView.smoothScrollToPosition(pos); } else { listView.setSelection(pos); } }
监听 回到顶部按钮的点击事件
@OnClick ( R.id.home_to_top ) public void onClick(View v) { switch (v.getId()) { case R.id.top_btn:// 点击按钮返回到ListView的第一项 setListViewPos(0); break; } }
相关文章推荐
- android系统服务及权限设置
- android学习笔记 SwipeRefreshLayout 的使用
- Android中页面自动刷新操作
- android:layout_gravity和android:gravity的区别
- Eventbus的第一次接触
- Android相关技术知识点
- android开发中常用的快捷键
- android Ant 打包
- EventBus的使用及 解决异常Subscriber ****has no public methods called **
- Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class android.sup
- 关于android:windowIsTranslucent 属性问题与第一加载白屏问题!
- 解决Android 5.0中出现的错误:Service Intent must be explicit
- Android IPC机制(三)——利用AIDL实现跨进程通信
- NEON在Android中的使用举例【转】
- 用android studio 生成javadoc
- style的使用
- Activity生命周期和启动模式
- Timer简易使用
- Android技术——注入技术
- [置顶] Android6.0动态权限