第一步:xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="up" />
<Button
android:id="@+id/down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="down" />
<ScrollView
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</ScrollView>
</LinearLayout>
第二部分:java
package com.example.testscrollview;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
ScrollView mScrollView;
TextView mTextView;
Button mButtonUP;
Button mButtonDown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mScrollView = (ScrollView) findViewById(R.id.sv);
mTextView = (TextView) findViewById(R.id.tv);
mButtonDown = (Button) findViewById(R.id.down);
mButtonUP = (Button) findViewById(R.id.up);
mButtonDown.setOnClickListener(this);
mButtonUP.setOnClickListener(this);
mScrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
//判断scrollView滑动到顶部的条件
//mScrollView.getScrollY() <= 0
if (mScrollView.getScrollY() <= 0) {
Log.e("sydlog", "滑动到顶部");
}
//判断scrollView滑动到底部的条件
//当mScrollView.getChildAt(0).getMeasuredHeight()<=mScrollView.getScrollY() + mScrollView.getHeight();
if (mScrollView.getChildAt(0).getMeasuredHeight()<=mScrollView.getScrollY() + mScrollView.getHeight()) {
Log.e("sydlog", "mScrollView.getChildAt(0).getMeasuredHeight()=" + mScrollView.getChildAt(0).getMeasuredHeight());
Log.e("sydlog", "mScrollView.getScrollY()=" + mScrollView.getScrollY());
Log.e("sydlog", "mScrollView.getHeight()=" + mScrollView.getHeight());
mTextView.append(getResources().getString(R.string.hello_world));
}
break;
default:
break;
}
return false;
}
});
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
//scrollTo:相对于原点的位置,进行滚动
//scrollBy:相对于上一次的位置,进行滚动
case R.id.down:
mScrollView.scrollBy(0, 30);
break;
case R.id.up:
mScrollView.scrollBy(0, -30);
break;
default:
break;
}
}
}