如何判断ScrollView的滑动位置
1个回答
推荐于2017-09-28 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517180
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向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]
[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]
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询