源码分析 view体系(二) 滑动事件

前言

 view的滑动是Android自定义控件的基础内容,我们在开发过程中难免会遇到view的滑动问题,
实现view的滑动有很多种方式,给大家讲几个基本的滑动方法

view的滑动

1.layout()

view中会调用onLayout()方法来摆放位置,我们也可以直接用onLayout的left、top、right、bottom这四种属性来控制View的位置。比如我们自定义一个View,在onTouchEvent()方法中获取触摸点的坐标,放入onlayout()中,这样就可以实现随着触摸的位置变化而滑动,如图:

...
 public boolean onTouchEvent(MotionEvent event) {
    //获取到手指处的横坐标和纵坐标
    int x = (int) event.getX();
    int y = (int) event.getY();

  switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN: 
      lastX = x; 
      lastY = y; 
       break;
  case MotionEvent.ACTION_MOVE:
            //计算移动的距离
            int offsetX = x - lastX;
            int offsetY = y - lastY;
            //调用layout方法来重新放置它的位置
            layout(getLeft()+offsetX, getTop()+offsetY,
                    getRight()+offsetX , getBottom()+offsetY);
            break;
    ...
}
...

2.也可以通过offsetLeftAndRight()和offsetTopAndBottom()方法

这个和onlayout大致相同,只不过这个方法传入的是偏移量,我就直接放代码啦

               case MotionEvent.ACTION_MOVE:
            //计算移动的距离
            int offsetX = x - lastX;
            int offsetY = y - lastY;
            //对left和right进行偏移
            offsetLeftAndRight(offsetX);
            //对top和bottom进行偏移
            offsetTopAndBottom(offsetY);
            break;

3.LayoutParams(通过改变参数达到滑动的目的)

LayoutParams中保存了view的布局参数,我们通过不短的改变view参数,从而达到滑动的目的,
比如我们想实现viewpage 两个条目切换的时候下面有有一个滑动的滑条那么就可以用这种方式


Paste_Image.png
    indicatorLine.post(new Runnable() {
        @Override
        public void run() {
            indicatorLine.measure(0, 0);
            int indicatorLineWidth = indicatorLine.getMeasuredWidth();
            originalIndicatorLineLeftMargin = rightTitleMarginLeft +
            (float) leftTitleWidth / 2 - (float) DimenUtil.dip2px(IntentionMajorActivity.this, 65) / 2 - textDistence;
            indicatorLineLayoutParams.leftMargin = (int) originalIndicatorLineLeftMargin;
            indicatorLine.setLayoutParams(indicatorLineLayoutParams);
        }
    });
}

4.scollTo与scollBy

scollTo(x,y)表示移动到某个具体的坐标点,而scollBy(dx,dy)则表示移动的增量为dx、dy。其实scollBy最终也是要调用scollTo的。scollTo、scollBy移动的是View的内容,如果在ViewGroup中使用则是移动他所有的子View。我们将ACTION_MOVE中的代码替换成如下代码:

   ((View)getParent()).scrollBy(-offsetX,-offsetY);

如果我们要让view随着手指的触摸方向移动我们就要把偏移量设为负值

后言

还有一种滑动方式那就是通过动画的方式进行滑动,那么不在今天讲述的范围,
由于本人水平有限,某些地方可能存在误解或不准确,如果你对此有疑问可以gitHub上提交issues进行反馈,如果喜欢的话可以star一下。╭(╯ε╰)╮

参考自:
http://blog.csdn.net/itachi85/article/details/50724558
http://blog.csdn.net/yhqbsand/article/details/22804869
http://blog.csdn.net/zhchzh1000/article/details/22193053
http://www.linuxidc.com/Linux/2015-11/125390.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容