关于scrollTo()和scrollBy()方法介绍
不管是scrollTo()还是scrollBy(),它们移动的都是View或ViewGroup中的内容,而不是view或viewGroup本身。并且这个移动过程是瞬间完成的,因此,为了实现更好的移动效果,他们一般需要与Scroller类结合使用,关于Scroller类的介绍请看:https://blog.****.net/guolin_blog/article/details/48719871
在介绍scrollTo()和scrollBy()方法区别之前,我们先看下Android坐标系的定义规则:
如图所示,android坐标系的原点在手机屏幕的左上角,x轴左→右为正,y轴从上→下为正。但是这并不适用于scrollTo()和scrollBy(),scrollTo()和scrollBy()刚好相反,即x轴左→右为负,y轴从上→下为负,这一点请注意。
现在说下scrollTo()和scrollBy()方法的区别:
ScrollTo()方法是让View相对于初始的位置移动一段距离,scrollBy()方法则是让View相对于当前的位置移动一段距离。现在通过一个例子实验一下。
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="scrollTo"
android:text="scrollTo"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="scrollBy"
android:text="scrollBy"/>
</LinearLayout>
代码:
public class TestActivity extends AppCompatActivity {
private LinearLayout layout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
layout = findViewById(R.id.layout);
}
public void scrollTo(View view){
layout.scrollTo(-60, -100);
}
public void scrollBy(View view){
layout.scrollBy(-60, -100);
}
}
看下效果:
可以看到,scrollTo按钮第一次点击移动了一段距离,后面再点击就不动了,因为scrollTo按钮的初始位置没变。scrollBy按钮每次点击都会移动,是因为scrollBy的当前的位置一直在变。另外不管是scrollTo还是scrollBy,移动的都是layout里的内容,所以两个按钮一起在移动