offest与layout的区别

来源:互联网 发布:答题软件哪个好 编辑:程序博客网 时间:2024/06/10 05:46

     好久没有更新博客,因为最近一直专注于手机银行的开发,其中代码业务逻辑以及安全性至关重要,工作学习的重心也就不太在代码美观性以及UI动画上面了,新出的姿势也没有好好去学习,嗯哼。当然程序员之间打屁什么的也拦不住,在一个技术牛群,作为一直萌新,是不敢大声说话的,只能默默的听着大佬们吹下的B ,谈论的姿势,然后回头默默的用铅笔记下来。

     群里的大佬们 谈到 offest 与layout的区别 当然 这都是因为一个大神级别的人物晒出了自己写的代码。如下:

  

    限于代码的公正性  我暂时只粘出这一部分 仅供今天讨论的话题。可以看到offset这个偏移量函数,对于大学不挂科的本萌新,函数 好头疼啊。 

   首先讲一下layout,有个 getLayout()方法,返回类型是Layout ,也就是返回textView的布局。

 然后重要的是通过这个 layout调用一个方法:

      getLineForVertical(int verticalPointPosition)  //得到某点在垂直方向上的行数值

      于是综上所述,在实际的触摸事件中可以这样使用:

      Layout layout=textView.getLayout();

      int line = layout.getLineForVertical(textView.getScrollY() + (int) event.getY());

      //得到触摸点在textView中垂直方向上的行数值。参数是触摸点在Y轴上的偏移量

 接下来继续介绍一个方法,要用到上边的 layout 和 line:

      layout.getOffsetForHorizontal( line , (int) event.getX() );

      //得到触摸点在某一行水平方向上的偏移量。

      参数分别是: 该行行数值 和 触摸点在该行X轴上的偏移量。

      此方法得到的该值会根据该行上的文字的多少而变化,并不是横向上的像素大小;

    大家都知道手机屏幕中整个坐标系是以左上角为原点(0,0),如果在屏幕没有滑动之前,这一理解肯定是ok的,但在滑屏之后,就会产生很多歧义和混淆,原因在于使用过程当中,很多方法的参数并非是参照屏幕,而是相对于父视图,对这整个过程和后面自定义控件的坐标变化带来的各个参数变化来说理解起来就并不那么适合了,最开始给人的感觉是越来越不清楚这个坐标该怎么设置,好像坐标系总在发生变化,后来才慢慢在思维当中构建起视图与视图容器以及屏幕之间的关系。

    这时那位贴出代码的大佬,发话了。 如果在动画过程中触发layout 很容易丢帧,layout 接下来就是measure   是个很耗时的过程,所以在动画的过程中 不可以触发到layout,用到offset的原因在于我现在图片在位移的同时还进行着缩放,所以为了不丢帧 我用offset 而不是layout。

    (附加一个姿势点  写一个自定义控件 包含一个图片和一个文字,怎么才能让图片和文字随控件的大小同样放大缩小,请直接让你的view setScale)。 

       今天的博客好像有一点乱  但是目的在于记录一个知识点,有不明白layout或者offset 自身的知识  请自行百度,本文仅限对比不同之处

0 0
原创粉丝点击