1, View是除了Android四大组件外,最常用的东西
2,什么是View:
View是android中所有控件的父类,比如TextView,LinearLayout等等
其中LinearLayout继承自控件组ViewGroup,当然ViewGroup也是继承自View
3,View的位置
top:左上角纵坐标
left:左上角横坐标
right:右下角横坐标
bottom:右下角纵坐标
如下图:
4,view的MotionEvent和TouchSlop
4.1MotionEvent:
ACTION_DOWN:手指接触屏幕
ACTION_MOVE:手指在屏幕上滑动
ACTION_UP:手指离开屏幕。
4.2TouchSlop
处理滑动时的过滤条件,简单来说就是,手指在屏幕上的一次操作算不算滑动。
系统默认值:ViewConfiguration.get(context).getScaledTouchSlop()
5,getX()getY()和getRawX()和getRawY()
前两者相对于父控件View 后两者相对于手机屏幕
6,VelocityTracker,GestureDetector,Scroller
6.1VelocityTracker:滑动速度,在view的ontouch事件中,查看速度
6.2 GestureDetector:手势判断,比如长按,点击,双击等,很少用,可以用 ontouch事件来代替
6.3Scroller:弹性滑动对象,实现view的位置改变等
7,原始滑动方式
7.1:ScrollerTo和Scroller By()
实现简单 但是只能滑动view里面的子元素
areaone.scrollTo(-100,-100);
7.2:改变view参数
实现复杂,但是如果view有交互,这种方式比较好
ViewGroup.MarginLayoutParams marginLayoutParams = ((ViewGroup.MarginLayoutParams) textView.getLayoutParams());
marginLayoutParams.leftMargin =100;
textView.setLayoutParams(marginLayoutParams);
7.3:动画
适用于没有交互的,或者动画复杂的view的滑动
ObjectAnimator.ofFloat(textView,"translationX",0,100).setDuration(1100).start(); ObjectAnimator.ofFloat(textView,"translationY",0,100).setDuration(1100).start();
8View的事件分发:
8.1:Activity-window-View
8.2:view中是从父到子,也就是从外到内,都不处理,返回给最顶级
8.3:ViewGroup默认不拦截任何事件,默认返回false
8.4:分发方法:dispatchTouchEvent,OnInterceptTouchEvent,OnTouchEvent
dispatchTouchEvent:分发
OnInterceptTouchEvent:拦截
OnTouchEvent:处理点击事件