12/28/2010 geek日志@Android

来源:互联网 发布:javascript的常用类型 编辑:程序博客网 时间:2024/05/22 12:35

从现在起到12/31/2010 我给自己定的任务是看android 看多少我不知道 但是每天看一章是肯定可以做得到的 并根据这章的内容来写些程序


看书主要看Professtional Android 2 Application Development 和 Hello Android


1. Canvas.save()和Canvas.restore()两个方法的作用是undo rotation, translate之类的东西 而不是undo drawing 否则不就没有意义了么


2. Professional中自建init()来获取resources中的color和dimen 而Hello中在onDraw里面获得 我认为前者更好 因为这样节省了每次都从onDraw里拿的时间(Hello里面也提过这个可以optimize)


3. onDraw是一层叠一层的 所以要先draw background 后draw foreground


4. 自己customize view的时候 和其他view的调用方法一样也是两种:

     1). 声明XML

          <org.haosong.todolist.ToDoListView

                android:...

          />

     2). 在activity中调用

          ToDoListView tdlv = new ToDoListView(this);

          setContentView(tdlv);

顺带说我不喜欢第2个方法 从第一眼就不喜欢 你说View先用constructor把activity给包括进去 然后activity又把view给包括进去 听起来就像是func f 调用了func g, func g又调用func f 怪得很 所以我用第一个


5. android2.3更新后 adb不在tools里面了 而是放在了platform-tools下面 请大家注意


6. eclipse里面 ctrl+1是可以批量更改变量名的 以后再也不用担心漏改了


7. getMeasuredWidth 用来取得可用width limited by parentview(这也就是在ondraw里如果不是root就要用getMeasuredWidth 的原因)


8. 接7, SDK上说的 getMeasuredWidth实际返回的是上一次调用measure后set变量的值 而measure实际上call了onMeasure 而onMeasure实际上call了setMeasuredDimension 整个过程是这样的:

getMasuredWidth->measure->onMeasure->setMeasuredDimension

过程有些绕 但实际原理就是个getter/setter


9. 和j2me的translate用法一样,作用就是移动原点,默认的原点(0,0)是在屏幕左上角的,你可以通过translate(x,y)把点(x,y)作为原点


10. 在实验compass这个程序的时候发现SDK的Canvas.rotate有两个rotate(degrees)和rotate(degrees, x, y)

书上用的是第二个 于是试了下第一个 发现果然是以(0, 0)为原点转的 间接的也验证了9

原创粉丝点击