View篇(一)

什么是View?

View是Android中所有控件的基类,不管是简单的button和TextView就还是复杂的RelativeLayout和ListView,他们都有共同的基类View.
View是一种界面层的控件的一种抽象,代表一个控件.
ViewGroup翻译为控件组,他的内部可以包括多个控件.ViewGroup也继承了View

View的位置参数

View的位置由四个顶点来决定,分别对应View的四个属性:top,left,right,bottom这些坐标都是相对View的父容器来说的

  • top是左上角的纵坐标
  • left是左上角的横坐标
  • right是右下角的横坐标
  • bottom是右下角的纵坐标

可以知道:

  • width = right-left
  • height=bottom-top

四个参数的获得方式

  • left = getLeft();
  • right = getRight();
  • top = getTop();
  • bottom = getBottom();

3.0增加了额外的几个参数:x,y,translationX,translationY.
其中x和y是View左上角的坐标.translationX和translationY是View相对于父容器的偏移量

  • x=left+transtionX
  • y = top+transtionY

MotionEvent和TouchSlop

1.MotionEven
在手指接触屏幕后,产生的主要事件又以下几种:

  • ACTION_DOWN:手指刚接触屏幕
  • ACTION_MOVE:手指在屏幕上移动
  • ACTION_UP:手指在屏幕上松开的一瞬间

正常情况下,手指触屏的行为会触发一系列的事件,典型的事件类型有以下几种:

  • 点击屏幕后离开移开: DOWN–> UP
  • 点击屏幕后滑动一会儿在松开: DOWN–>MOVE…MOVE–>UP

通过MotionEvent对象我们可以得到点击事件发生的x坐标和y坐标,系统提供了两组方法:

  • getX/getY: 返回的是相对于View左上角的x坐标和y坐标
  • getRawX/getRawY: 返回的是相对于屏幕左上角的x和y坐标

2.TouchSlop
TouchSlope是指系统所能识别的最小滑动距离,这是一个常量和设备无关.如果滑动距离小于这个常量,那么系统就不认为你在进行滑动操作.获取这个常量的方式:
ViewConfiguration.get(getContext()).getScaledTouchSlop();

我们可以利用这个常量做一些过滤操作.

VelocityTracker(速度追踪)

用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度,在View的onTouch方法中追踪当前点击事件的速度

VelocityTracker tracker = VelocityTracker.obtain();  tracker.addMovement(event);//获取速度方式要提前设置一个单位时间   tracker,computeCurrentVelocaty(1000);//1000毫秒  int xVelocity = (int)tracker.getXVelocity();  int yVelocity = (int)tracker.getYVelocity();  

这里的速度指的是一段时间内手指所划过的像素数,速度可以为负数,比如从右向左滑动.当不需要他的时候需要调用Clear方法来重置并回收内存:

tracker.clear();  tracker.recycle();  

GestureDetector(手势检测)

用于辅助检测用户的单机,滑动.双击,长按等行为.
使用并不复杂,首先创建一个GestureDetector对象并实现onGestureListener接口,根据需求我们还可以实现OnDoubleTapListener接口来监听双击行为.

GestureDetector mGestureDetector = new GestureDetector(this);//解决长按无法拖动现象mGestureDetector.setIsLongpressEnabled(false);

接着,接管View的onTouch方法,在待监听View的方法中添加下面实现代码

boolean consume = mGestureDetector.onTouch(event);return consume;

完成上面代码我们就可以选择实现OnGestureListener和OnDoubleTapListener中的方法.

Scroller(滑动)

弹性滑动对象,用于实现View的弹性滑动.
当View使用scrollTo/scrollBy方法来滑动时,效果是瞬间完成的,会显得很生硬.这个时候可以通过Scroller来实现有过度效果的滑动,Scroller本身无法让View弹性滑动他需要和View的computeScroll方法配合使用才能完成这个效果.

Scroller mScroller = new Scroller(mContext);//缓慢滑动到指定位置peivate void smoothScrollTo(int destX,int destY){int scrollX = getScrollX();int delta= destX - scrollX;//1000ms内滑向destXmScroller.startScroll(scrollX,0,delta,1000);invalidata();}@Overridepublic void somputeScroll(){if(mScroller.somputeScrollOffset()){scrollTo(mScroller.getCurrX(),mScroller.getCurrY());postInvalidate();}}

更多相关文章

  1. Android(安卓)SVG矢量图/矢量动画、Vector和VectorDrawable矢量
  2. 2014-11-8Android学习------Android(安卓)仿真翻页效果实现原理
  3. Android(安卓)OpenGL ES(二)绘制三角形
  4. 五幅图学会Android(安卓)Canvas的坐标系变换(rotate translate s
  5. android--多点触控的实现
  6. Android(安卓)实现滑动方法总结
  7. Android高手进阶教程(三)之----Android(安卓)中自定义View的应用
  8. Android(安卓)Jetpack - 使用 Navigation 管理页面跳转
  9. Android(安卓)自定义模拟时钟控件

随机推荐

  1. android之自定义组合控件
  2. Android(安卓)getCacheDir和getFilesDir
  3. Android(安卓)的OkHttp(发送网络请求)
  4. 查看系统属性build.prop
  5. Android(安卓)退出功能
  6. Android(安卓)ADB wifi 连接
  7. Android(安卓)Studio库Module引用aar文件
  8. android hessian通信
  9. Android带圆形进度条的ImageView
  10. Android之Drawable转换drawable、bitmap