`
ggggnuirgw
  • 浏览: 97984 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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源码,你就能着到这个效果了.

2
4
分享到:
评论
2 楼 ggggnuirgw 2011-03-25  
有空你就多来逛逛 哈哈!
JasonShieh 写道
下载了,试试看,谢谢了

1 楼 JasonShieh 2011-03-25  
下载了,试试看,谢谢了

相关推荐

Global site tag (gtag.js) - Google Analytics