Categories
Android

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来操作。

Categories
Android

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)
就很好用,很多人估计是不知道,自个儿写了这样的函数,重复造车轮。

Categories
Android

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;

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

Pages: Prev 1 2