读书人

Android TTPod圆桌面歌词显示效果

发布时间: 2012-08-22 09:50:34 作者: rapoo

Android TTPod桌面歌词显示效果

?? ? 前段时间听歌使用的应用,发先这效果的,有点像在pc上桌面歌词一样,于是就准备研究研究,今天我把我研究的思路也跟他家说下。

?

?? ? ?首先要准备几样东西:

?? ? ? ? ? ? ? ? ? ? ? 1)apktool

?? ? ? ? ? ? ? ? ? ? ? 2)文本编辑器(geany)

?

??准备好以上工具后我们开始工作:

?

?? ? ? ? 1> "apktool d ttpod.apk /home/ffly" ? ?使用前面的命令吧*.dex反编译成smali

?

?? ? ? ? 2> 分析歌词显示效果,貌似就是在当前界面上添加了一个显示歌词的控件,是不是有点类似Toast呢?

?

?? ? ? ? 3>既然是添加上去的,那么我们根据这个来试下在smali里面是不是会有个addview方法呢?我们去查找一下(使用geany)

?? ? ? ? ? ? 查找结果如下:

?

?? ? ? ? ? ? FloatWindow.smali 文件 ? ? ?763行 ?handleShow()方法里面

? ? ? ?invoke-interface {v1, v2, v0}, Landroid/view/WindowManager;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V

?

?? ? ? ? ? ? ?从结果上可以看出这里使用的是WindowManager.addView(View view,ViewGroup.LayoutParams params);

?? ? ? ? ? ? 好,现在我们知道是怎么添加上去的,那么我们现在就开始寻找所需要的参数吧,千万别看到现在就以为OK了哦,好戏还在后面 哈哈。

?

?? ? ? ? 4>我们继续查看handleShow()方法找到传进去的参数,我找到如下方法被掉用:

?

?? ? ? ? ? ? ?FloatWindow.smali 文件 ? ? ?705行 ?handleShow()方法里面

?

?

?

invoke-direct {p0}, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->createLayout()Landroid/view/WindowManager$LayoutParams;

?

?? ?move-result-object v0

?

?? ? ? ? ? ? ?从上面看出来,参数是从createLayout()方法的返回值(WindowManager.LayoutParams)

?

?

?? ? ? ? ? ? ?=====================================================

?

?? ? ? ? ? ? ? ? ??.method private createLayout()Landroid/view/WindowManager$LayoutParams;

?? ?.locals 3

?

?? ?.prologue

?? ?.line 240

?? ?new-instance v0, Landroid/view/WindowManager$LayoutParams;

?

?? ?invoke-direct {v0}, Landroid/view/WindowManager$LayoutParams;-><init>()V

?

?? ?.line 242

?? ?.local v0, p:Landroid/view/WindowManager$LayoutParams;

?? ?const/16 v1, 0x53

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->gravity:I

?

?? ?.line 243

?? ?iget v1, p0, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->mWidth:I

?

?? ?iput v1, p0, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->mLastWidth:I

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->width:I

?

?? ?.line 244

?? ?iget v1, p0, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->mHeight:I

?

?? ?iput v1, p0, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->mLastHeight:I

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->height:I

?

?? ?.line 246

?? ?const/4 v1, -0x3

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->format:I

?

?? ?.line 248

?? ?iget v1, v0, Landroid/view/WindowManager$LayoutParams;->flags:I

?

?? ?invoke-direct {p0, v1}, Lcom/sds/android/ttpod/extend/minilyric/FloatWindow;->computeFlags(I)I

?

?? ?move-result v1

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->flags:I

?

?? ?.line 249

?? ?const/16 v1, 0x7d3

?

?? ?iput v1, v0, Landroid/view/WindowManager$LayoutParams;->type:I

?

?? ?.line 250

?? ?const/4 v1, 0x0

?

?? ?iput-object v1, v0, Landroid/view/WindowManager$LayoutParams;->token:Landroid/os/IBinder;

?

?? ?.line 251

?? ?new-instance v1, Ljava/lang/StringBuilder;

?

?? ?const-string v2, "FloatWindow:"

?

?? ?invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

?

?? ?invoke-virtual {p0}, Ljava/lang/Object;->hashCode()I

?

?? ?move-result v2

?

?? ?invoke-static {v2}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;

?

?? ?move-result-object v2

?

?? ?invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

?

?? ?move-result-object v1

?

?? ?invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

?

?? ?move-result-object v1

?

?? ?invoke-virtual {v0, v1}, Landroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V

?

?? ?.line 253

?? ?return-object v0

.end method

===============================================================

?

?? ? ? ? ? 上面就是我们找到的方法了,只要吧相应的参数设置好就OK,否则是看不到效果的哦,具体解释我就不说了,我直接提供源码给大家,倒是后自己对照这看 ?呵呵。

?

?? ? ? ? ?5>说到这也就差不多完成了,大家还记得我前面提到的Toast吗?呵呵,有兴趣自己看下Toast源码,你就能着到这个效果了.

有空你就多来逛逛 哈哈!

读书人网 >Android

热点推荐