Facebook Messenger如何绘制聊天记录? (机器人)

时间:2014-02-25 08:40:51

标签: android facebook android-layout android-imageview android-windowmanager

我知道StackOverflow上已经有很多次问过这个问题了,但我很着迷Facebook Messenger如何绘制Chatheads。

我按照此tutorial将ImageView作为叠加层放置。然而,拖动它是非常缓慢,不像Chatheads显示非常流畅的动画。

在正在拖动Chathead时,启用“开发者”选项中的“显示GPU视图更新”选项会闪烁屏幕。但是,拖动我的ImageView不会触发任何闪烁。

这是一个小小的截屏视频:https://dl.dropboxusercontent.com/u/13595927/temp/TRIM_20140225_134543.mp4

我尝试将图层类型设置为LAYER_TYPE_SOFTWARE,但它没有改变任何内容。我还缺少什么?

2 个答案:

答案 0 :(得分:5)

我的聊天记者就像facebook messenger:
https://github.com/henrychuangtw/FB-ChatHead

  • 拖动和弹跳动画
    enter image description here

  • Messenger:显示文字和发送文字
    enter image description here enter image description here


    • 长按停止
      enter image description here

答案 1 :(得分:0)

这是我的简单解决方案: 1)创建服务(不要忘记在Manifest.xml中添加它)。

2)添加要在窗口上绘制的ImageView(或其他视图)。您必须通过初始化LayoutParams来准确指定屏幕上的位置。

3)将OnTouchListener添加到要移动的视图中,然后在必须将其从屏幕上移除时在MotionEvent.ACTION_UP中计算(这是当您放下视图时)(在我的情况下,当皱巴巴的纸张在回收中时) bin)中。

4)不要忘记在Manifest.xml中添加以下代码片段:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

5)不要忘记删除您在服务中的onDestroy()中绘制的所有视图:

@Override
public void onDestroy() {
    super.onDestroy();

    // remove views on destroy!
    if (ivCrumpledPaper != null) {
        mWindowManager.removeView(ivCrumpledPaper);
        ivCrumpledPaper = null;
    }

    if (ivRecycleBin != null) {
        mWindowManager.removeView(ivRecycleBin);
        ivRecycleBin = null;
    }
}

6)结果如下:

Dismiss message

7)我创建了一篇博文,其中包含更多详细信息和完整代码 - here