1.什么是View?
View是Android中所有控件的基类,View是界面的控件的一种抽象。
不管是简单的Button和TextView还是复杂的RelativeLayout和ListView,共同基类都是View。
2.View的位置参数。
View的位置由它的四个顶点决定。分别对应View的四个属性:top、left、right、bottom。
top是左上角纵坐标、left是左上角横坐标、right是右下角横坐标、bottom是右下角纵坐标。
注意:这些坐标是相对于父容器来说的,是1种相对坐标。
weight = right - left; height = bottom - top。
x = left +ttraslationX
3. 一些基础概念:
1)MotionEvent :触碰屏幕后的事件。
ACTION_DOWN (手指按下)、ACTION_MOVE(手指滑动) 、ACTION_UP(手指离开)
2)TouchSlop:能被系统识别出的最小滑动距离,是一个常量,由不同的手机系统决定
3)VelocityTracker:速度追踪器
用于追踪手指在滑动过程中的速度,包括水平速度和竖直方向的速度。
速度 = (终点位置 - 起点位置)/ 时间段
4)GestureDetector:手势检测,辅助检测单击、滑动、长按、双击等行为。看根据项目需要选择性地重写某个方法。
5)Scroller :控制弹性滑动,需要配合computeScroll方法实现。
------------------------------------------------------------------------------
4. 滑动scrollTo和scrollBy
scrollTo(x,y) 基于当前位置绝对滑动, 且滑动的不是view本身,而是view的内容。参数x和y的值为正数,以view的左顶点为坐标向上向左移动。
由于scrollTo(x,y)是一个以坐标点为目的的滚动,指定它所移动的坐标位置,但如果重复移动的坐标未发生改变,你只能看到一次移动效果。
private void scrollView (){
int x = 20;
int y = 20;
tvScroll.scrollTo(x, y);
}
scrollBy(x,y) 基于当前位置相对滑动。由于是相对数值,所有可以为多次。
private void scrollByView (){
int x = 20;
int y = 20;
tvScroll.scrollBy(x, y);
}
5. 利用动画去滑动。
ps:此种方式不能改变View的位置,位置参数,包括宽和高。
1)属性动画
private void animatorView () {
ObjectAnimator.ofFloat(tvScroll, "translationX", 0, 100).setDuration(2000).start();
}
2)XML方式
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter = "true"
android:zAdjustment = "normal">
<translate
android:duration = "100"
android:fromXDelta = "0"
android:fromYDelta = "0"
android:toXDelta = "100"
android:toYDelta = "100" />
</set>
6. 通过改变位置参数。
private void changeLayoutParams () {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) tvScroll.getLayoutParams();
params.width += 15;
params.leftMargin += 10;
tvScroll.requestLayout();
}
总结:以上三种滑动方式优缺点如下
scrollTo/scrollBy,操作简单,适用于对View内容的滑动。
动画,操作简答,主要适用于没有交互的View和实现复杂的动画效果。
改变布局参数,操作稍微复杂,适用于没有交互的View。