您的位置:首页 > 移动开发 > Android开发

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的OnScrollListener

ListView的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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: