scrollview的代码
有很多知识点:
scrollview的滑动停止监听。
scrollview回到顶部,或者底部的方法。
scrollview到达顶部或者底部的判断方法。
上面的参考连接也都写在注释里面了。
public class ScrollViewActivity extends Activity implements OnClickListener {
private ScrollView scrollView;// scrollView数据列表
private Button toTopBtn;// 返回顶部的按钮
private int scrollY = 0;// 标记上次滑动位置
private View contentView;
private final String TAG="test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scroll);
initView();
}
/**
* 初始化视图
*/
private void initView() {
scrollView = (ScrollView) findViewById(R.id.my_scrollView);
if (contentView == null) {
contentView = scrollView.getChildAt(0);
}
toTopBtn = (Button) findViewById(R.id.top_btn);
toTopBtn.setOnClickListener(this);
//http://blog.csdn.net/jiangwei0910410003/article/details/17024287
/******************** 监听ScrollView滑动停止 *****************************/
scrollView.setOnTouchListener(new 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 停止
*
* @param view
*/
private void handleStop(Object view) {
Log.i(TAG,"handleStop");
ScrollView scroller = (ScrollView) view;
scrollY = scroller.getScrollY();
doOnBorderListener();
}
});
/***********************************************************/
}
/**
* ScrollView 的顶部,底部判断:
* http://www.trinea.cn/android/on-bottom-load-more-scrollview-impl/
*
* 其中getChildAt表示得到ScrollView的child View, 因为ScrollView只允许一个child
* view,所以contentView.getMeasuredHeight()表示得到子View的高度,
* getScrollY()表示得到y轴的滚动距离,getHeight()为scrollView的高度。
* 当getScrollY()达到最大时加上scrollView的高度就的就等于它内容的高度了啊~
*
* @param pos
*/
private void doOnBorderListener() {
Log.i(TAG,ScreenUtil.getScreenViewBottomHeight(scrollView) + " "
+ scrollView.getScrollY()+" "+ ScreenUtil
.getScreenHeight(ScrollViewActivity.this));
// 底部判断
if (contentView != null
&& contentView.getMeasuredHeight() <= scrollView.getScrollY()
+ scrollView.getHeight()) {
toTopBtn.setVisibility(View.VISIBLE);
Log.i(TAG,"bottom");
}
// 顶部判断
else if (scrollView.getScrollY() == 0) {
Log.i(TAG,"top");
}
else if (scrollView.getScrollY() > 30) {
toTopBtn.setVisibility(View.VISIBLE);
Log.i(TAG,"test");
}
}
/**
* 下面我们看一下这个函数: scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部
* scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部
*
*
* 需要注意的是,该方法不能直接被调用 因为Android很多函数都是基于消息队列来同步,所以需要一部操作,
* addView完之后,不等于马上就会显示,而是在队列中等待处理,虽然很快, 但是如果立即调用fullScroll,
* view可能还没有显示出来,所以会失败 应该通过handler在新线程中更新
*
* http://blog.csdn.net/t12x3456/article/details/12799825
* http://www.tuicool.com/articles/zayIjq
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.top_btn :
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
toTopBtn.setVisibility(View.GONE);
break;
}
}
}
很多细节都注释在代码里面了,参考链接也已经加上。大家下载下代码执行一下看看。
代码http://download.csdn.net/detail/jjdhshdahhdd/9059757