第一次写博客,遇见了这样的需求,当时看见那个角就有点触了,想到了自定义去实现但是思路不是很明确,跟老大请教了下,给了我思路就开始上手,但是还是出不来想要的效果,最后功夫不负有心人啊,上效果图吧,

参考文档:https://segmentfault.com/a/1190000006753544,

这是一个自定义组合空间,可以往里面放任何控件,自定义9patch效果.

public class ChatItemLayout extends FrameLayout {private int resourceId;private Context mContext;private Bitmap mMaskBitmap;private Paint mPaint;public ChatItemLayout(@NonNull Context context) {this(context,null);}public ChatItemLayout(Context context, AttributeSet attrs) {this(context, attrs,0);}public ChatItemLayout(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ChatItemLayout);resourceId = typedArray.getResourceId(R.styleable.ChatItemLayout_background_src, R.drawable.talk_blue_bg);typedArray.recycle();mContext = context;mPaint = new Paint();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);if (getChildCount() <= 0) {return;}int child_height = getChildAt(0).getMeasuredHeight();int measuredWidth = getChildAt(0).getMeasuredWidth();if (mMaskBitmap != null && !mMaskBitmap.isRecycled()) {mMaskBitmap.recycle();mMaskBitmap = null;}if (mMaskBitmap == null) {mMaskBitmap = getMask(measuredWidth, child_height);}}@Overrideprotected void dispatchDraw(Canvas canvas) {try {drawMirrorBitmap(canvas);} catch (Exception e) {e.printStackTrace();}}private void drawMirrorBitmap(Canvas canvas) {canvas.saveLayerAlpha(0.0F, 0.0F, getMeasuredWidth(), getMeasuredHeight(), 250, Canvas.ALL_SAVE_FLAG);super.dispatchDraw(canvas);mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));canvas.drawBitmap(mMaskBitmap, 0.0f, 0.0f, mPaint);
//        canvas.restoreToCount(i);}private Bitmap getMask(int width, int height) {Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.BLACK);Drawable mask = mContext.getResources().getDrawable(resourceId);mask.setBounds(0, 0, width, height);mask.draw(canvas);return bitmap;}

这是刚出来效果,还没有进一步的优化,等后面再优化吧

Android 仿微信聊天气泡相关推荐

  1. android 仿微信聊天气泡显示图片,怎么实现微信聊天时的气泡图(一)

    首先,微信聊天的时候气泡图是什么样呢?上图, , 要实现这种气泡图,要怎么做? 主要的就是实现那个小三角吗?首先想到的肯定是使用伪元素+定位,对!!! 那我们来试一下,上代码点这里,这样很轻松的实现了 ...

  2. android 仿微信聊天气泡显示图片,仿微信聊天气泡 图片尖角 按下变暗

    实现微信气泡图片尖角 //-------------gen corner bitmap flow------------------------ //load the bg: .9.png which ...

  3. android 仿微信聊天气泡显示图片,实现仿照微信聊天气泡里显示图片效果的自定义View...

    第一部分是自定义的气泡效果的View,代码如下 public class BitmapShapeView extends View { private Paint mPaint; private Pa ...

  4. android 仿微信聊天气泡显示图片,eoe资源:仿微信聊天气泡界面的实现(dota小黑与大马的对白)...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 -接上- 众所周知,listview要充分运用到缓存试图convertView,否则一旦数据量大了很容易造成OOM异常,而我们的adaper里有用到两种视 ...

  5. android格式化时间中文版,Android 仿微信聊天时间格式化显示功能

    本文给大家分享android仿微信聊天时间格式化显示功能. 在同一年的显示规则: 如果是当天显示格式为 HH:mm 例:14:45 如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12 如果 ...

  6. android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能

    本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6 ...

  7. Android仿微信聊天界面

    今天说说android的仿微信聊天界面,我只想说两个字:坑爹 项目已经传到了github: https://github.com/hebiao6446/Hantu-android- 还好我写过iOS仿 ...

  8. android仿微信聊天功能,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  9. android 仿微信聊天时间格式化显示

    仿微信聊天时间格式化显示. 在同一年的显示规则: 如果是当天显示格式为 HH:mm 例:14:45 如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12 如果是在同一周 显示格式为 周一 H ...

最新文章

  1. 经典网络GoogLeNet介绍
  2. 在这场人工智能“战争”中,这些国家都在做些什么?
  3. Android 一个绚丽的loading动效分析与实现!
  4. Socket2实现tcp端口扫描
  5. 递归算法转换为非递归算法的技巧
  6. 程序员漫画:别人眼中的程序员vs真实的程序员
  7. 中if判断中文_Excel中的逻辑函数的使用技巧 IF函数中的多条件判断
  8. IntelliJ IDEA 背景色以及字体设置
  9. 学生管理系统功能设计c语言,C语言--学生信息管理系统设计.doc
  10. svn往分支提代码_SVN建立分支和合并代码
  11. Springboot 项目打包 Compilation failure: Compilation failure:
  12. snagit 9.0注册码
  13. PCB线路板制作之蚀刻工艺流程
  14. 1.初识Mysql数据库
  15. 3.22全局参数的保存_补作业来啦~~
  16. sklearn机器学习(七)决策树预测泰坦尼克号幸存者
  17. iOS 应用签名原理
  18. error: src refspec dev does not match any.
  19. 刚刚,优酷的模版引擎,竟然开源了!
  20. 企业如何用InfBox架设自己的内部即时信息IM服务器

热门文章

  1. 智能汽车如何联接未来?岳麓峰会亮出“长沙梯度”
  2. C/C++ 程序员的职业生涯规划,你想从事哪方面呢?这里都有介绍
  3. java 1900年_JDK与1900年01月01日
  4. (附源码)计算机毕业设计SSM金牛社区疫情防控系统
  5. 三种登录形式的实现—永久登录、每次进入页面登录、设置登录有效期
  6. 为什么一群人之中,蚊子就“盯”着你?为你揭秘“蚊子”的真相!
  7. Electron使用electron-updater自动更新
  8. 51Nod_1925 进制转换【进制+枚举】
  9. 自考生三级跳成博士生 从英语零分到专业讲师
  10. Direct3D Devices