2017/9/30 学习笔记

来源:互联网 发布:购物软件app排行榜 编辑:程序博客网 时间:2024/05/20 09:48

1.View坐标与Android坐标

   View坐标相对父控件

   Android坐标相对屏幕左上角

2.View的滑动方式

    (1).在Touch事件中的Down事件中进行初始坐标的获取,在Move事件中获取到新的计算偏移量并且通过layout()方法进行重新绘制。

    (2).同样是在Touch事件中进行,区别是通过更改params去改变View的位置达成View滑动的效果

    (3).通过Animation(View动画)(交互差,真是位置不变),通过Animator进行移动

                  ObjectAnimator为最常用的类,通过类似floatOf方法(静态工厂模式/简单工厂模式)获取实例,参数中的例如translationX的属性值,必须要有get,set方法,用来给动画内部通过Java反射机制调用set方法去改变对象的属性值,过程有start,Repeat,end,Cancel.

                  AnimatorSet组合动画,提供了with,after(ani),after(long),before四个方法,它的play()方法中包含一个Builder类(建造者模式);

    (4).Scroller

               Scroller实现View的位移:

                重写View的computeScroll()方法,此方法在每次绘制View的draw()方法中调用,computeScroll()该方法中必须调用Scroller中的computeScrollOffset()方法,computeScrollOffset()返回false表示滑动结束,该方法中大概流程为对边动画时间与滑动时间,若动画事件小于滑动时间的话,就会进入Switch语句,并且会根据StartScroll()方法中传递的参数进行下一步操作,在接下来的流程中通过插值器来计算出该段时间的移动距离,并且赋值给mCurrX,mCurrY,这样Scroller才能获取到当前的X,Y坐标。然后调用ScrollT()方法进行位移,最后调用invalidate();方法刷新界面。接下来就是启动,直接写入你需要的X,Y偏移量传递给startScroll()方法,并调用invalidate();进行整个位移事件的触发。  简而言之就是   startScroll()进行参数赋值-》调用invalidate()触发View重绘-》重绘触发computeScroll()-》computeScroll()中又不断进行滑动时间的计算,根据时间计算出当前坐标位置,并通过ScrollTo()方法进行移动。


3.通过Java反射机制反编译。class--.java

   通过反射机制获取类中的方法,属性

   http://blog.csdn.net/liujiahan629629/article/details/18013523


4.静态工厂模式/简单工厂模式(23种设计模式)

   简而言之就是为了减少代码耦合性的一种设计模式,典型的例子是拥有同一个父类的多个子类,这多个子类按照普通的逻辑应该是根据不同的Type去分别调用构造函数进行new操作,而我们通过创建静态工厂类(不是静态类),并且里写入一个静态方法,该方法可以简单的通过传递过来的字符串通过if或switch语句进行new操作,这种方式比较low,另一种方式就是通过Java反射得到我们要的类的实例。

   我们常见的单例模式就属于这种设计模式,可以减少对象的创建个数。


以上为今天的收货,明天继续。


      明天的学习计划:

           1.View的事件分发机制

           2.View的工作流程

           3.自定义View--(待定)

                

原创粉丝点击