Android(安卓)仿微信聊天图片
16lz
2021-01-25
前言
在微信的聊天界面中,发送图片的时候显示图片如下,下面就来看看如何实现
实现
首先我们自定义一个ImageView用于显示聊天界面中的图片。
自定义ChatImageView继承ImageView,代码如下
public class ChatImageView extends ImageView { private Context context ; public ChatImageView(Context context) { super(context); this.context = context; } public ChatImageView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public ChatImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } public ChatImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); this.context = context; } /** * 设置图片 * @param bitmap 显示的图片 * @param res 背景图片id */ public void setImage(Bitmap bitmap , int res){ Bitmap bitmap_bg = BitmapFactory.decodeResource(getResources(), res); Bitmap bp = getRoundCornerImage(bitmap_bg, bitmap); setScaleType(ScaleType.CENTER_CROP); setImageBitmap(bp); } private Bitmap getRoundCornerImage(Bitmap bitmap_bg,Bitmap bitmap_in){ int height = bitmap_in.getHeight(); int width = bitmap_in.getWidth(); //设置图片的宽高比例 if(height != 0){ double scale = (width * 1.000) / height ; if(scale >= 1){ width = getBitmapWidth() ; height = (int)(width / scale) ; }else { height = getBitmapHeight(); width = (int) (height * scale); } }else { height = 100 ; width = 100 ; } Bitmap roundConcerImage = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); //绘制图片 Canvas canvas = new Canvas(roundConcerImage) ; Rect rect = new Rect(0,0,width,height) ; Rect rectF = new Rect(0,0,bitmap_in.getWidth(),bitmap_bg.getHeight()); NinePatch ninePatch = new NinePatch(bitmap_bg,bitmap_bg.getNinePatchChunk(),null); Paint paint = new Paint() ; //抗锯齿 paint.setAntiAlias(true); ninePatch.draw(canvas,rect) ; //设置混合 两层绘制交集 显示上层 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap_in, rectF, rect, paint); return roundConcerImage ; } /** 获取屏幕的高度 */ private int getScreenHeight(){ WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getHeight() ; } /** 获取屏幕的宽度 */ private int getScreenWidth(){ WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth() ; } /** 获取图片宽度 */ private int getBitmapWidth(){ return getScreenWidth() / 3 ; } /** 获取图片高度 */ private int getBitmapHeight(){ return getScreenHeight() / 4 ; } }
通过上面的代码可以看出,通过这种方式实现微信的聊天界面图片显示需要两个图片,一个是要显示的图片,还有一个就是背景图片,背景图片一般用9patch图片。
QQ交流群
微信公众号:Android在路上,欢迎关注
更多相关文章
- Android(安卓)界面布局
- 如何避免打开键盘或横竖屏切换,active重启,处理界面的延迟动画
- android studio-GridLayout网格布局设计简易的计算器界面
- 使用Android系统调用裁剪图片并保存
- Android实现EventBus登录界面与传值(粘性事件)
- Android(安卓)Activity界面切换添加动画特效 (修改)
- android 调用Camera,获取预览帧中的图像
- ubuntu 下的android环境部署
- android用户界面之Gallery3D学习资料汇总