【小项目整理】面试官你好!这是我的项目经验

项目一:流式布局实战

项目完成后,记载的博客。包括思路,知识点,代码,效果等

使用技术:

自定义View/ViewGroup,递归算法

责任描述:

项目的全部开发

技术点描述:
  • onMeasure方法会调用多次。
    自定义ViewGroup中,onMeasure方法和onLayout方法必须重写。且onMeasure方法会调用多次,因此有些变量需要在onMeasure方法的开始就进行一些清空操作(为了避免内存抖动,不要new,而是clear
  • onMeasure方法由父控件调用。
    当控件的父控件要放置该控件的时候,父控件会调用子控件的onMeasure方法。onMeasure方法的两个参数就是父控件告诉子控件可获得的空间以及关于这个空间的约束条件,子控件拿着这些条件就能正确的测量自身的宽高了。
  • MeasureSpec的作用。
    MeasureSpec 代表一个32位的int值,高2位代表SpecMode,低30位代表SpecSize
  • ④最后一行特殊处理
    在流式布局中,最后一行要进行单独处理。否则最后一行可能因为长度不满一行应有长度而被舍弃。
  • ⑤如果某子View被隐藏了,则无需测量。测量的都是没被隐藏的
  • ⑥自身真正的的宽度和高度(setMeasuredDimension方法)
    控件自身真正的的宽度和高度并不一定是测量后得到的宽度和高度,如果父控件给自己的ModeExactly,那么就直接用父亲给我的Size,除此之外都用自己测量后得到的Size

此项目通过自定义流式布局实战,帮助我理解自定义ViewGroup的递归测量,以及MeasureSpec的含义。

难点:
onMeasureonLayoutonDraw调用的顺序(平级上)
onMeasure的递归调用,setMeasureDimision
onMeasure的两个参数的应用规则
④如何处理换行的逻辑
⑤最后一行的处理

项目二:游动的锦鲤

画锦鲤完成后,将步骤和知识点整理成的博客,还有源代码
游锦鲤完成后,将步骤和知识点整理成的博客,还有源代码

使用技术:

自定义View,动画,数学知识,贝塞尔曲线

责任描述:

项目的全部开发

技术描述:

将此项目划分为两部分,第一部分是将锦鲤画出来,第二部分是让锦鲤游起来

  • 1.第一部分
    第一部分相对简单,有如下一些技术点需要注意
    ①求坐标算法
    在此部分中,求坐标算法几乎贯穿始终。其数学原理是三角函数的知识。有一个细节,就是安卓中的坐标系和数学中的坐标系正好相反,用-180来体现这个相反。
    ②求各个点的坐标
    各个点的坐标其实是根据现有的比例来确定的。只要有了①的算法,求坐标并不难。尤其是注意中间有很多度数的加减。其代表的是顺着x轴顺时针还是逆时针才能到达目标点。顺时针就是负的,逆时针就是正的
    ③二阶贝塞尔曲线

  • 2.第二部分
    第二部分就比较难理解了,尤其是运用到了很多数学知识
    ①鱼身和鱼节肢摆动频率控制
    利用三角函数的周期,使用一个属性动画,即可实现鱼身和鱼节肢摆动频率的不同。
    ②两个鱼节肢的开始时间不应相同
    利用cossin的区别,实现两个鱼节肢摆动频率相同,但是开始摆动的时间不同
    ObjectAnimator实现水波纹
    ④核心算法求两线夹角(余弦定理)
    余弦定理不算难的,妙点在于利用tan来判断鱼将要游动的方向,以及AOB角取反,来求得控制点2的坐标。
    ⑤始终以图片控件的左上角为鱼游动的参考点
    ⑥利用PathMeasure使鱼头跟着路径转

此项目通过自定义View与属性动画的配合,结合大量数学知识,实现了一个锦鲤游动的效果。不仅帮助我提高了对自定义View的理解程度以及动画的使用能力,还通过数学知识,提高了我的思维能力。

难点:
①参考大小和坐标:从网上找的现成的比例。坐标是反的,有时候需要-180
②各种数学知识,比如鱼身和鱼节肢摆动频率不应相同,开始摆动的时间也不应相同,这些都用到了三角函数的周期
③余弦定理求两线夹角,并且通过tan来判断鱼游动的方向

项目三:RecyclerView自动吸顶项目实战

项目完成后,将步骤和知识点整理成的博客,以及源代码

使用技术:

RecyclerView进阶使用、自定义ItemDecorationItemDecorationonDrawOveronDraw方法的区别、取消冗余绘制、算法思想

责任描述:

项目的全部开发

技术描述:
  • ①自定义ItemDecoration
    尤其是onDrawonDrawOver方法的区分使用。可以理解为一个是用在动上,一个是用在静上。
  • ②利用onDrawOver实现吸顶时的组名更换。
    即判断当前组的下一个组是不是新组,以此为依据分别进行draw
  • ③冗余绘制的处理
    通过添加绘制条件,去掉多余组名分割线的绘制;解决组名瞬间改变而非“顶”上去;使用clipRect使字只能在固定区域内进行绘制

此项目覆盖了RecyclerView的基本使用,以及使用自定义ItemDecoration绘制分割线和组名,以及使用onDrawonDrawOver实现自动吸顶效果等知识点,还进行了去掉冗余绘制的优化,还有大量的算法。

难点:
onDrawonDrawOver的区别,和选择。通过outRect预留出更大的空间
②如何保持一直在顶部:onDrawOver,如何保证组名的变换:判断下一个是不是组名,如果是的话,随时改变bottom,进行绘制
③加上paddingTop的时候,分割线和组名变换异常。解决方案:将原来绘制的坐标,把paddingTop考虑进去就行了
④如果paddingTop是黑色的,会发现文字也在过度绘制,所以用个clipRect就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值