Android UI开发第四十二篇——实现实现易信的圆形图像和对话列表的图像显示部分
来源:互联网 发布:淘宝详情页多大尺寸 编辑:程序博客网 时间:2024/06/06 00:39
显示图像时,很多个性化显示,圆形或圆角、气泡等等,我们这一篇文章探讨一下圆形和气泡的显示,仿照易信中的实现,先看下效果图:
代码:
public class RoundImageView extends ImageView {public RoundImageView(Context context) {super(context);// TODO Auto-generated constructor stub}public RoundImageView(Context context, AttributeSet attrs) {super(context, attrs);}public RoundImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onDraw(Canvas canvas) {Drawable drawable = getDrawable();if (drawable == null) {return;}if (getWidth() == 0 || getHeight() == 0) {return; }Bitmap bitmapBorder =BitmapFactory.decodeResource(getResources(), R.drawable.border); Bitmap bitmapMask =BitmapFactory.decodeResource(getResources(), R.drawable.mask);int _width = bitmapBorder.getWidth();int _height = bitmapBorder.getHeight();Paint paint = new Paint();PorterDuffXfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap() ;canvas.drawBitmap(bitmapBorder, 0, 0, paint);int saveFlags = Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG;canvas.saveLayer(0, 0, _width, _height, null, saveFlags);canvas.drawBitmap(bitmapMask, 0, 0, paint);paint.setXfermode(xfermode);int left = _width/2 - bitmap.getWidth() /2;int top = _height/2 - bitmap.getHeight()/2;canvas.drawBitmap(bitmap, left, top, paint);paint.setXfermode(null);canvas.restore();}}
上述效果使用了“遮罩”的方式实现,使用了Paint的Xfermode。我们介绍下setXfermode方法,setXfermode方法用来设置两张图片相交时的模式。
PorterDuff.Mode.CLEAR 清除画布上图像
PorterDuff.Mode.SRC 显示上层图像
PorterDuff.Mode.DST 显示下层图像
PorterDuff.Mode.SRC_OVER上下层图像都显示,上层居上显示
PorterDuff.Mode.DST_OVER 上下层都显示,下层居上显示
PorterDuff.Mode.SRC_IN 取两层图像交集部门,只显示上层图像
PorterDuff.Mode.DST_IN 取两层图像交集部门,只显示下层图像
PorterDuff.Mode.SRC_OUT 取上层图像非交集部门
PorterDuff.Mode.DST_OUT 取下层图像非交集部门
PorterDuff.Mode.SRC_ATOP 取下层图像非交集部门与上层图像交集部门
PorterDuff.Mode.DST_ATOP 取上层图像非交集部门与下层图像交集部门
PorterDuff.Mode.XOR 取两层图像的非交集部门
RoundImageView使用了自定义View实现,重点重写了onDraw方法,使用了paint、canvas,这两个自定义View必须掌握的两个基础工具,这里就不多写了,提供几个参考:
Android 2D Graphics学习(一)、android.graphics介绍
Android--Matrix图片变换处理
Paint的效果研究
- Android UI开发第四十二篇——实现实现易信的圆形图像和对话列表的图像显示部分
- 实现实现易信的圆形图像和对话列表的图像显示部分
- Android圆形图像的实现。
- Canvas 圆形图像的实现
- 微信开发<1>——图像拍照接口实现
- opencv实现图像的灰度转换,均值滤波,实现图像的显示和存储
- 基于NiosⅡ的图像采集和显示的实现
- Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式
- Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式
- Android UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡短信样式
- 使用QT实现一个图像处理软件1 —— 图片的加载和显示
- 用 JFileChooser 实现图像的浏览和显示
- 用 JFileChooser 实现图像的浏览和显示
- 使用媒体追踪器实现图像的加载和显示
- 可动态显示圆形图像或圆形文字的AvatarImageView
- 自定义ImageView实现圆形图像
- 自定义Drawable实现圆形图像
- GDI实现图像的简单显示特效
- SPFA 邻接表
- 能够编译的万能makefile
- Linux下修改tomcat内存
- php高级程序员面试题
- miniui数据集显示时可以加载自定义字段内容
- Android UI开发第四十二篇——实现实现易信的圆形图像和对话列表的图像显示部分
- 摘要:阿里云聚无线联合高德、友盟、科大讯飞等,为开发者提供一站式服务。成为扶持认证开发者,就能享受三个月免费云资源。
- oracle数据库表死锁或者存储过程,包无法编辑解决方法
- qt鼠标事件总结 (转)
- cygwin下载、安装教程和解决CDT出现“program 'make' is not found in path”bug
- 马伊俐父亲:请放过我的孩子
- 关于插件编程
- win7 64位 VS2010调试提示“ORA-12154: TNS: 无法解析指定的连接标识符”的解决方法
- 白盒测试学习总结1