Scroller可以实现对视图View、ViewGroup的滚动,系统提供的很多控件都封装对Scroller的使用,对于Scroller来说有两个重要的方法值得我们去关注,一个是ScrollTo、一个是ScrollBy,准确的来说ScrollBy方法内部使用的也是ScrollTo,然而调用View的ScrollTo或者ScrollBy方法看起来比较僵硬,通常我们会借助Scroller类来达到我们想要的效果,今天我们来学习一下Scroller类的使用。
对于View来说:
mScrollX:View的内容(content)相对于View本身在水平方向的偏移量。
mScrollY::View的内容(content)相对于View本身在垂直方向的偏移量。
scrollTo(int x, int y):将一个视图的内容移动到指定位置.此时偏移量 mScrollX,mScrollY就分别等于x,y.
scrollBy(int x, int y): 在现有的基础上继续移动视图的内容.
对于ViewGroup来说:
移动的是它对应的所有子View。
注意:scrollTo()和scrollBy()移动的只是View的内容,但是View的背景是不移动的.
一个Demo让你彻底理解这两个方法
1.先看一下效果图
2.我们看一下onClick方法是如何实现的。
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.leftButton:
//让mTextView的内容往左移
mTextView.scrollBy(30, 0);
//让mLeftButton的内容也往左移
mLeftButton.scrollBy(20, 0);
break;
case R.id.rightButton:
//让mTextView的内容往右移直接到-30的位置
mTextView.scrollTo(-30, 0);
break;
default:
break;
}
}
了解完Scroller对VIew的使用,我们来看一下Scroller对ViewGroup的使用。
1. 先看一下效果
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 将整个ViewGroup布局向右便宜50个像素
mLinearLayout.scrollBy(-50, 0);
}
});
}
为什么-50就是向右呢?为了更好的让你理解Scroller坐标,请看下面的这张图
相信经过以上的讲解,你会掌握Scroller类中两个重要的方法ScrollTo、ScrollBy了。
下载Demo请猛戳