XXXXX
C/C++
XXXXX
C#/.net
XXXXX
js
java
java
开发导航 开发导航 www.endv.cn
天云

Android 开源优秀的项目

webrtc

square/picasso  Android 的一个强大的图像下载和缓存库

  • A powerful image downloading and caching library for Android

google/iosched  

移动跨平台用户界面构建框架

greenrobot/EventBus Android优化事件总线,简化活动、碎片、线程、服务等之间的通信…

 

bumptech/glide 

Android的图像加载和缓存库,专注于平滑滚动

 

  • 一个强大的Android图表视图/图形库,支持线杆派雷达-泡沫- K线图…

facebook/fresco

一个用于管理图像和使用它们的内存的Android库。

 

zxing/zxing

ZXing(“斑马线”)是一个开源、多格式的一维/二维条码图像处理库用java实现的,港口的其他语言。

 

loopj/android-async-http

Android异步HTTP库

NativeScript/NativeScript

渲染后的效果动画本身对Android和iOS

facebook/fresco Android / iOS视频播放器基于ffmpeg N3.2,与mediacodec,videotoolb

 

Rocket.Chat 是特性最丰富的 Slack 开源替代品之一。 https://github.com/RocketChat/Rocket.Chat

主要功能:群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接预览,文件上传,语音/视频 聊天,截图等等。

Rocket.Chat 原生支持 Windows,Mac OS X ,Linux,iOS 和 Android 平台。Rocket.Chat 通过 hubot 集成了非常流行的服务,比如 GitHub,GitLab,Confluence,JIRA 等等。

高级的特性包括:OTR 消息,XMPP 多用户聊天,Kerberos 认证,p2p 文件分享等等。

技术特性  使用 Meteor,包括 Blaze 前端

 

一、Android的XMPP客户端 Beem

Beem 是一个运行于 Android 手机平台的 XMPP (jabber) 的客户端软件,兼容标准的 XMPP 服务器和服务,例如 Ejabberd, Openfire, Facebook, 和 Gmail). 支持 SASL, 代理(Socks4, Socks5, HTTP), DNS SRV, and chatting with a specific resource.

  

 

项目主页:http://beem-project.com/

 

二、Android 聊天程序 jchat4android 

Android jChat 是一个 Android 手机上基于位置的聊天软件,采用P2P通讯机制。

 
三、Android手机的VoIP客户端 Sipdroid

Sipdroid是一个运行于Android手机平台上的SIP/VoIP客户端。

     

资源网站: http://sipdroid.org/

 

四、Java视频通话和聊天工具 Jitsi

虽然jitsi是java视频工具,但能移植到android.

Jitsi是一个开源的,安全(ZRTP加密),高质量的 SIP/XMPP视频通话、会议、聊天、桌面共享、文件传传输。可以安装在你喜欢的操作系统中并且支持多种IM网络。Jitsi是当最功能最完整的高级通 信工具。Jitsi让你可以在同一个软件中连到Facebook、GoogleTalk、XMPP、Windows Live、Yahoo!、AIM和ICQ进行通信。

 

资源网站:https://jitsi.org/

 

五、linphone开源的VOIP视频电话

LinPhone是一个VOIP电话工具,目前有android\ios\windows等版本,都是开源的。它能够让你通过internet来查询朋友的IP,并通过IP给他打电话。

 

资源网站:http://www.linphone.org/

 

简单介绍

  • 如何使用
    EmotionInputDetector mDetector = EmotionInputDetector.with(this)
          //表情、更多页面布局Layout
          .setEmotionView(emotionLayout)
          //表情和更多功能是一个Frament,因此放在了ViewPager里面
          .setViewPager(viewpager)
          //聊天信息列表
          .bindToContent(chatList)
          //输入框
          .bindToEditText(editText)
          //表情按钮绑定
          .bindToEmotionButton(emotionButton)
          //add按钮绑定
          .bindToAddButton(emotionAdd) 
          //发送按钮绑定
          .bindToSendButton(emotionSend)
          //录音按钮绑定
          .bindToVoiceButton(emotionVoice)
          //显示“按下说话,放开发送”的textview绑定
          .bindToVoiceText(voiceText)
          .build();
    之所以没有自定义view做,是为了将布局样式交给开发者自己定义,EmotionInputDetector只起到了一个管理工具类的作用。

Paste_Image.png


输入框下面这部分是一个不可左右滑动的viewpager,表情、相册等都是一个fragment。如果你想扩展其它功能时只需要在EmotionInputDetector的viewpager里面加一个fragment即可,其它逻辑操作全在你这个fragment里面。

      • 表情功能简介
        表情主要在ChatEmotionFragment里面,里面嵌套了一个viewpager,viewpager的每一页是一个GridView,每一页的GridView的最后一个item是一个删除按钮。具体可以看demo。
        再说说表情的加载EmotionUtils,表情加载类,可自己添加多种表情,分别建立不同的map存放和不同的标志符即可
        EMOTION_CLASSIC_MAP.put("[呵呵]", R.drawable.d_hehe);
        EMOTION_CLASSIC_MAP.put("[嘻嘻]", R.drawable.d_xixi);
        EMOTION_CLASSIC_MAP.put("[哈哈]", R.drawable.d_haha);
        EMOTION_CLASSIC_MAP.put("[爱你]", R.drawable.d_aini);
        这是放在本地的图片,对于在线表情。你只需要将你的imageurl和标识符一一对应即可。然后通过你的标识符取对应的imageurl。
      • 语音功能简介
        录音主要通过AudioRecoderUtils这个工具类,播放通过MediaManager。具体代码就不上了。
        录音事件
        mVoiceText.setOnTouchListener(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View v, MotionEvent event) {
              // 获得x轴坐标
              int x = (int) event.getX();
              // 获得y轴坐标
              int y = (int) event.getY();
              switch (event.getAction()) {
                  case MotionEvent.ACTION_DOWN:
                      mVoicePop.showAtLocation(v, Gravity.CENTER, 0, 0);
                      mVoiceText.setText("松开结束");
                      mPopVoiceText.setText("手指上滑,取消发送");
                      mVoiceText.setTag("1");
                      mAudioRecoderUtils.startRecord(mActivity);
                      break;
                  case MotionEvent.ACTION_MOVE:
                      if (wantToCancle(x, y)) {
                          mVoiceText.setText("松开结束");
                          mPopVoiceText.setText("松开手指,取消发送");
                          mVoiceText.setTag("2");
                      } else {
                          mVoiceText.setText("松开结束");
                          mPopVoiceText.setText("手指上滑,取消发送");
                          mVoiceText.setTag("1");
                      }
                      break;
                  case MotionEvent.ACTION_UP:
                      mVoicePop.dismiss();
                      if (mVoiceText.getTag().equals("2")) {
                          //取消录音(删除录音文件)
                          mAudioRecoderUtils.cancelRecord();
                      } else {
                          //结束录音(保存录音文件)
                          mAudioRecoderUtils.stopRecord();
                      }
                      mVoiceText.setText("按住说话");
                      mVoiceText.setTag("3");
                      mVoiceText.setVisibility(View.GONE);
                      mEditText.setVisibility(View.VISIBLE);
                      break;
              }
              return true;
          }});
        录音话筒动画主要是通过mImageView.getDrawable().setLevel()进行一个上下波动的效果展示
      • 聊天气泡自定义
        聊天气泡没有用.9图片,因为.9图片背景,不能满足图片气泡功能。所以笔者采用的是自定义view:BubbleDrawable、BubbleImageView、BubbleLinearLayout。如此也可以满足用户自定义气泡的需求。本文没有做这个功能,有需求可以根据以上三个自定义view自己加。

        三方开源框架

        为尊重开源作者,再次将所用的三方开源框架一一罗列:
        EasyRecyclerView——支持下拉上拉刷新等功能全面的RecyclerView
        butterknife——View注解库和配套插件android-butterknife-zelezny
        EventBus——事件总线
        Glide——图片加载
        BubbleView——聊天气泡自定义view
        StateButton——一个可以用代码设置selector背景(按下去背景颜色更改,样式变化等等)的button, 再也不用写selector了

        写到最后

        如果觉得本文对你有帮助,感谢给个star
        github地址:https://github.com/Rance935/ChatUI
posted @ 2017-03-01 05:06  Endv  阅读(640)  评论(0编辑  收藏  举报