Android 仿微信聊天图片

前言

在微信的聊天界面中,发送图片的时候显示图片如下,下面就来看看如何实现
这里写图片描述

实现

首先我们自定义一个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在路上,欢迎关注

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值