zoukankan      html  css  js  c++  java
  • Android中View的基础知识

    View的界限

    View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下。这四个值可以通过任何View的子类调用getTop()/get...得到。

    但是坑爹的是这些不能在生命周期函数里调用,否则都返回0,因为绘制还没完成呢,可以放在button的onclicklistener中。

    事件的种类

    分为MotionEvent和TouchSlop,分为ACTION_DOWN, ACTION_MOVE, ACTION_UP。

    MotionEvent是点击之后的event可以通过getX()/getY()/getRawX()/getRawY()来得到点击的位置,区别是一个是相对当前View的,一个是相对手机屏幕左上角的。

    TouchSlop是系统能识别出的最小滑动距离。可以通过

    VelocityTracker用开跟踪划动过程中的速度

    GestureDetector用来检测用户的单击、滑动、长按、双击行为。

    Scroller用来弹性滑动对象。

    划动的方式

    划动的方式主要有3中,分别是通过View本身提供的scrollTo/scrollBy方法。第二种是通过动画给View施加平移效果。第三种是通过改变view的LayoutParams使得View重新布局从而实现滑动。

    第一种,scrollTo/scrollBy只是改变View的内容而不是View本身的位置,View本身的位置是不变的(getScrollX是改变的,但是getTop/getLeft/getBottom/getRight不变)。

    有点是操作简单,适合对View的内容进行滑动。

    第二种是动画,优点是操作简单,适用于没有交互的view和实现复杂的动画效果。

    第三种是改变布局参数,优点是适用于有交互的View,缺点是操作稍微复杂。

    事件分发机制

    点击事件的分发就是对MotionEvent事件的分发过程,由三个主要的方法共同完成:dispatchTouchEvent(), onInterceptTouchEvent(), onTouchEvent()

    只要点击事件传递到了当前view,dispatchTouchEvent方法一定会被调用他们之间的关系可以用下图表示:

        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            boolean consume = false;
            if (onInterceptTouchEvent(event)){
                consume = onTouchEvent(event);
            } else {
                consume = child.dispatchTouchEvent(event);
            }
            return consume;
        }

    对于ViewLayout来说,处理的顺序是:

    MainActivity-dispatchTouchEvent-ACTION_DOWN
    CustomLayout-dispatchTouchEvent-ACTION_DOWN
    CustomLayout-onInterceptTouchEvent-ACTION_DOWN
    CustomButton-dispatchTouchEvent-ACTION_DOWN
    CustomButton-onTouch-ACTION_DOWN
    CustomButton-onTouchEvent-ACTION_DOWN
    MainActivity-dispatchTouchEvent-ACTION_UP
    CustomLayout-dispatchTouchEvent-ACTION_UP
    CustomLayout-onInterceptTouchEvent-ACTION_UP
    CustomButton-dispatchTouchEvent-ACTION_UP
    CustomButton-onTouch-ACTION_UP
    CustomButton-onTouchEvent-ACTION_UP
    CustomButton--onClick

    对View来说,处理的顺序是:

    MainActivity-dispatchTouchEvent-ACTION_DOWN
    CustomButton-dispatchTouchEvent-ACTION_DOWN
    CustomButton-onTouch-ACTION_DOWN
    CustomButton-onTouchEvent-ACTION_DOWN
    MainActivity-dispatchTouchEvent-ACTION_UP
    CustomButton-dispatchTouchEvent-ACTION_UP
    CustomButton-onTouch-ACTION_UP
    CustomButton-onTouchEvent-ACTION_UP
    CustomButton--onClick

    详情请参考:http://blog.csdn.net/lanhuzi9999/article/details/26515421

  • 相关阅读:
    Js 时间轴和拓扑图
    JQuery OLAP Grid
    Jquery Datatables 动态列名
    CSS3实用菜单
    图片翻转动画
    Java转C#的最佳工具
    Mvc.JQuery.Datatables
    推荐windows下的日志跟踪工具:SnakeTail
    在.net中使用aquiles访问Cassandra(四)
    在.net中使用aquiles访问Cassandra(三)
  • 原文地址:https://www.cnblogs.com/dracohan/p/5857670.html
Copyright © 2011-2022 走看看