View详解【一】
来源:互联网 发布:网络舆情管理系统 编辑:程序博客网 时间:2024/06/15 03:25
View详解【一】
View是界面层的一种抽象,是Android中所有控件的基类
View的位置参数:
View 的位置由四个顶点坐标来决定,即:top,left,right,bottomtop:View的左上角纵坐标left:View的左上角横坐标right:View的右下角横坐标bottom:View的右下角纵坐标
如图所示:
需要注意的是View的这些坐标都是相对于父布局而定的
很容易的就能得到View的宽高:
width = right - left;htight = bottom - top;
而通过View的getTop()、getLeft()、getBottom()、getRight()方法可以得到View的坐标属性
从Android3.0开始View又加入了几个属性参数:
x,y:View左上角的坐标translationX,translationY:View左上角相对于父布局的偏移量
即:
x = left + translationX;y = top + translationY;
需要注意的是在View移动的时候left与top是不会发生改变的,改变的是translationX和translationY的值;
MotionEvent 和TouchSlop
MotionEvent:手指接触屏幕后所产生的一系列事件
ACTION_DOWN----手指刚接触屏幕ACTION_MOVE----手指在屏幕上移动ACTION_UP------手指从屏幕上松开的一瞬间getRawX()/getRawY():返回相对于屏幕左上角的x和y坐标
TouchSlop:系统所能识别的被认为是滑动的最小距离,不同的设备此值可能不同
touchSlop = ViewConfiguration.get(getContext)).getScaledTouchSlop();
VelocityTracker
VelocityTracker:用于追踪手指在滑动过程中的速度
使用前要先追踪当前事件:
VelocityTracker vt = VelocityTracker.obtain();vt.addMovement(event);
然后通过getXVelocity()或getYVelocity()方法获取x,y方向的速度:
vt.computeCurrentVelocity(1000);//表示1000ms时间间隔内滑动的速度int velocityX = (int) vt.getXVelocity();int velocityY = (int) vt.getYVelocity();
不用的时候注意回收:
vt.clear();vt.recycle();
GestureDelector:手势检测,用于检测用户的单击、滑动、长按、单击等行为
GestureDelector需要创建一个对象并实现OnGestureListener接口
GestureDelector gd = new GestureDelector(this);//解决长按屏幕后无法拖动的现象gd.setIsLongpressEnabled(false);
接着需要接管View的onTouchEvent()方法:
boolean consume = gd.onTouchEvent(event);return consume;
接下来就可以有选择的实现OnGestureListener 和 OnDoubleTapLinener中的方法了
Scroller
Scroller 用于实现View的弹性滑动,是用来对View的内容滑动
当使用View的scrollTo/scrollBy来滑动时,滑动过程是瞬间完成的
getScrollX()/getScrollY()得到该视图内容相当于视图起始坐标的偏移量
mScroller.getCurrX() //获取mScroller当前水平滚动的位置
mScroller.getCurrY() //获取mScroller当前竖直滚动的位置
mScroller.getFinalX() //获取mScroller最终停止的水平位置
mScroller.getFinalY() //获取mScroller最终停止的竖直位置
View的滑动
View的滑动有三种方式
1. view本身提供的scrollTo/scrollBy方法
2. 通过动画给View施加平移效果
3. 改变View的layoutParams使View重新布局
使用scrollTo/scrollBy
scrollBy实际上调用了scrollTo的方法,它实现了基于当前View的相对滑动,是让View相对于当前的位置滚动某段距离scrollTo实现了基于所传参数的绝对滑动,让View相对于初始的位置滚动某段距离
在滑动过程中,mScrollX的值总是等于View左边缘和View内容左边缘在水平方向上的距离,mScrollY同理
view边缘是指VIew的位置,View内容边缘是View中内容的边缘
scrollTo和scrollBy只能改变View内容的位置,而不能改变View在布局中的位置
如果从左往右滑动或者从上往下滑动时,ScorllX和ScrollY为负值,否则为正值
使用动画
主要操作View的translationX和translationY属性,如果采用属性动画的话,为了兼容3.0以下的版本,需要采用开源动画库nineoldandroids
下面两个动画都是讲View向右平移100px
//普通动画
改变布局参数:
改变layoutParams属性来导致view的移动
MarginLayoutParams params = (MarginLayoutParams)button.getLayoutParams();params.width += 100;params.leftMargin += 100;button.requestLayout();//或者button.setLayoutParams(params);
onInterceptTouchEvent是在ViewGroup里面定义的。Android中的layout布局类一般都是继承此类的。onInterceptTouchEvent是用于拦截手势事件的,每个手势事件都会先调用onInterceptTouchEvent。
onTouchEvent同样也是在view中定义的一个方法。处理传递到view 的手势事件。手势事件类型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL等事件。
- View详解【一】
- View加载详解(一)
- 自定义View(一): OnMeasure详解
- view 详解 (一) 将view加载到窗口过程分析
- 【Android 动画】View Animation详解(一)
- 【Android 动画】View Animation详解(一)
- Android群英传--自定义View详解(一)
- Android view 详解(一)LayoutInflater
- UGUI提高<一> Scroll View参数详解
- Android事件分发详解一(View)
- View (一)LayoutInflater()方法详解
- sendMessage(View view)详解
- View工作原理(一)事件传递原理详解
- ViewDragHelper详解(一)- 可拖动的view
- ViewDragHelper详解(一)- 可拖动的view
- View工作原理(一)事件传递原理详解
- View工作原理(一)事件传递原理详解
- ViewDragHelper详解(一)- 可拖动的view
- Android如何调用第三方SO库
- 异步消息处理机制Handler源码解析
- Git提交遇到的一个问题
- 20170725
- 源码剖析---------webbench(测压工具)
- View详解【一】
- Java中的进制转换
- Vs 2015-2017好用插件
- Android多屏幕适配
- int类型的数据长度
- LINUX下面JDK的安装
- KazaQ's Socks
- Eclipse新建基于Maven的spring-mvc项目
- MYSQL学习笔记(十三)组合查询