Pages:  1 2 ... 15 16 17 18 19 20 21 22
lytsing – Page 17 – lytsing's Blog

Author: lytsing

  • 自定义ProgressBar Style

    在前面写过一篇 《 Android Market的 Loading效果》,有贴出ProgressBar的图片,圆形的环是橙黄色的,从Android 2.0后,UI发生了变化,见下图。

    拿QQ空间来做例子吧:

    非常的简单,新建一个styles.xml文件,

    <?xml version="1.0" encoding="UTF-8"?>
    <resources>
        <style name="qZoneListProgressStyle" parent="@android:style/Widget.ProgressBar.Small">
            <item name="android:indeterminateDrawable">@anim/loading</item>
        </style>
    </resources>

    写了个简单的示范例子,代码:qzoneLoading.tar 或在github上也可以下载 https://github.com/lytsing/qzoneLoading,效果图为:

    留意了一下UC浏览器的进度loading:

    开始也以为是修改styles即可,反编译一下,才知道是在新建一个DrawWaitingPage.java类绘画. 大概是用到Paint,Canvas,Timer之类的,自定义一个View。

  • Android播放gif格式图片

    关于gif的播放,Android ApiDemos给出一个实例:

    ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java

    小的gif图片用Movie播放还行,大一点的就搞不定了。官方文档说不推荐使用gif格式的。解析gif要占很大的内存,不过你可以把gif分解成N张png格式的,用AnimationDrawable来播放。在MTK,展信平台上,一些连续动画的游戏,也是采用这样样的方法,分解gif为N多个Frame,做过Flash的网页设计师应该是很熟悉了。

    在res/anim目录下创建相应的xml文件,举个例子: girl_kiss.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" android:visible="true">
    <item android:drawable="@drawable/kiss_frame00_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame01_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame02_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame03_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame04_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame05_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame06_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame07_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame08_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame09_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame10_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame11_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame12_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame13_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame14_160ms" android:duration="160" />
    <item android:drawable="@drawable/kiss_frame15_0ms" android:duration="0" />
    </animation-list>

    然后在主程序通过AnimationDrawable来操作。

  • android 字符串格式化

    发现没啥好写的,提供个链接吧,查阅方便。

    一般用到 String.format与Html.fromHtml
    官方上有详细介绍:
    http://developer.android.com/guide/topics/resources/string-resource.html

    有段时间看了日历的代码,发现Plurals有 xliff 字样,搜索一下,小日本写的
    http://linkyou-blog.blogspot.com/2010/02/previously-on-my-last-blog.html
    终于弄明白了。

    读一些代码,发现string.xml里还发现一些蛮有用的技巧,直接写Unicode码:
    用 \u0020 表示空格。
    用 \u2026 表示省略号。

    android提供的android.text.format 也很有用,比如 Formatter 提供的
    public static String formatFileSize(Context context, long number)
    就很好用,很多人估计是不知道,自个儿写了这样的函数,重复造车轮。

  • Android 反编译中的 $assertionsDisabled

    很久以前看了一些apk经过反编译后得到的 .dex 格式文件,发现有assertionsDisabled, 不解记录之,今天翻看以前的工作日志,于是写个程序验证。

    .field static final $assertionsDisabled Z
    
    .method static <clinit>()V
    .limit registers 1
    .line 85
     16     const-class v0,org/lytsing/android/Assert
     17 ; v0 : Ljava/lang/Class;
     18     invoke-virtual  {v0},java/lang/Class/desiredAssertionStatus ; desiredAssertionStatus()Z
     19 ; v0 : Ljava/lang/Class;
     20     move-result v0
     21 ; v0 : single-length
     22     if-nez  v0,l1c6ac
     23 ; v0 : single-length
     24     const/4 v0,1
     25 ; v0 : single-length
     26 l1c6a6:
     27     sput-boolean    v0,org/lytsing/android/Assert$assertionsDisabled Z
     28 ; v0 : Z
     29     return-void
     30 l1c6ac:
     31     const/4 v0,0
     32 ; v0 : single-length
     33     goto    l1c6a6
     34 .end method

    在某个函数调用:

    110     .line 153
    111     sget-boolean v0, Lorg/lytsing/android/Assert;->$assertionsDisabled:Z
    112 
    113     if-nez v0, :cond_0
    114 
    115     array-length v0, p2
    116 
    117     array-length v1, p4
    118 
    119     if-eq v0, v1, :cond_0
    120 
    121     new-instance v0, Ljava/lang/AssertionError;
    122 
    123     invoke-direct {v0}, Ljava/lang/AssertionError;-><init>()V
    124 
    125     throw v0

    好像很复杂, 其实仅仅一行代码:

    assert conIds.length == stringIds.length;

    就产生了上面一坨的代码。

  • 再说说代码风格

    老掉牙的话题了,晚上bb给我发一段 php代码,别人写的taobao api,要修改一下cache,我看了,头都大了,代码缩进tab与空格并用,导致我用vim打开很乱。一般,代码写得很糟糕的,我都拒绝看,老朋友嘛,硬着头皮看看,用indent对齐一下,还算好。再看一些函数的命名,我又晕了一把。比如
    public function SendCheng ($mode = 'GET',$format = 'xml')
    还真的看不明白是什么意思。

    在小的软件公司,很多新员工来上班第一天,领导拷贝一堆pdf技术文档给你自个儿看,公司压根儿没编码规范的文档,祸害从此开始。从另一个侧面来说,作为一个程序员,自己也有责任去看《程序设计实践》,网上流传的《华为编码规范》,林锐的《高质量C/C++编程指南》等。千万不要搞什么像Button1, Button2, Button3, xingbie(性别), jifen(积分, 这个的命名方式,害人害己。美工A进公司时也已经工作3年了,网页与图片都是随便的001.html, 002.html, 003.index,不明白是什么意思。我问她为什么不给它们起个有意思的名字,比如一张表示团队的图片,teamwork,jpg 与001.jpg,谁更容易管理,更容易让搜索引擎找到?她说以前没人要求她这么做过,文件随意放,老师没教过要这样做的。再者,搞网站3年,竟然不知道什么是w3c,我真的感到悲哀,同时也为我自己感到悲哀,没有做这方面的测试,以为这是基本的知识,大家都知道了。

    良好的代码风格,是一个程序员的基本修养。