如何判断ScrollView的滑动位置

 我来答
huanglenzhi
推荐于2017-09-28 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517181
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
有时候我们需要判断scrollview滑动到了哪一个位置。下面这部分代码完整的说明了如何判断scrollvew滑动到哪一个位置:
[mw_shl_code=java,true]public
class MyScrollView extends ScrollView {
public MyScrollView(Context
context, AttributeSet attrs) {
super(context,
attrs);

handler = new Handler() {

public void handleMessage(Message msg) {

if (msg.what == 1) {

/*这样做为什么可以成功?

*
认真思考它。如果思考明白了,尤其是getMeasuredHeight()与getHeight方法有什么区别,那么整个View的绘制过程可以说你就十分清晰。如果确实不明白,留言吧!我会比较详细的说明的。

*/
if
(view.getMeasuredHeight() <= getScrollY() + getHeight()

&& getScrollY() != 0) {

onScrollListener.onButtom();

} else if (getScrollY() == 0) {

onScrollListener.onTop();

} else

onScrollListener.onScroll();
}

}
};
//
对事件的处理一定是对view刻画完毕之后才开始的,所以,getHeight是有值的

setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent
event) {
view = getChildAt(0);

if (MotionEvent.ACTION_UP == event.getAction()) {

handler.sendEmptyMessage(1);

}
//return false与return
true 是有区别的,如果返回false,scrollview是不是有滑动的。百度一下这两个有什么区别就知道为什么要这么做了

return false;
}

});
}

public MyScrollView(Context context,
AttributeSet attrs, int defStyle) {
super(context, attrs,
defStyle);
// TODO Auto-generated constructor stub

}

private OnScrollListener onScrollListener;
private
Handler handler;
private View view;

public void
setOnScrollListener(OnScrollListener onScrollListener) {

this.onScrollListener = onScrollListener;

}
}
/*
*这个小demo只是为了展示如何判断用户滑动到了scrollview的位置。还有很多优化性能的方法,比如新开线程和将一些代码放在新的方法中,在Activity里面调用它!

*/[/mw_shl_code]
XML文件布局如下:[mw_shl_code=java,true]<?xml version="1.0"
encoding="utf-8"?>
<org.chongshi.test.MyScrollView
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"
android:id="@+id/scrollView"
>

<TextView
android:id="@+id/text"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

/>

</org.chongshi.test.MyScrollView>[/mw_shl_code]
MainActivity的代码如下:
[mw_shl_code=java,true]public
class MainActivity extends Activity {
private MyScrollView
scrollView;
private TextView textView;
@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

scrollView=(MyScrollView) findViewById(R.id.scrollView);

textView=(TextView) findViewById(R.id.text);
StringBuilder
s=new StringBuilder();
for(int i=0;i<150;i++){

s.append("这是一个scrollView的测试");

s.append("\n");
}
textView.setText(s);

scrollView.setOnScrollListener(new OnScrollListener() {

@Override

public void onTop() {

Log.e("OnTop", "OnTop");
}

@Override

public void onScroll() {

Log.e("OnScroll", "OnScroll");
}

@Override

public void onButtom() {

Log.e("OnButtom", "OnButtom");

}
});

}

}[/mw_shl_code]
OnScrollListener代码:[mw_shl_code=java,true]public
interface OnScrollListener {

public void
onButtom();
public void onTop();
public void
onScroll();

}
[/mw_shl_code]
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式