前言

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

实现

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

更多相关文章

  1. Android(安卓)界面布局
  2. 如何避免打开键盘或横竖屏切换,active重启,处理界面的延迟动画
  3. android studio-GridLayout网格布局设计简易的计算器界面
  4. 使用Android系统调用裁剪图片并保存
  5. Android实现EventBus登录界面与传值(粘性事件)
  6. Android(安卓)Activity界面切换添加动画特效 (修改)
  7. android 调用Camera,获取预览帧中的图像
  8. ubuntu 下的android环境部署
  9. android用户界面之Gallery3D学习资料汇总

随机推荐

  1. 在xml配置文件中设置字体加粗
  2. Activity中的四种启动模式
  3. mk中的 android:sharedUserId和LOCAL_CER
  4. android Activity 四大启动模式探究
  5. java CA证书相关操作,Android,java
  6. E/错误(3907): android.view.ViewRootImp
  7. Android(安卓)MediaPlayer使用方法简单介
  8. Android(安卓)自定义像素AVD模拟器无键盘
  9. android 代码控制LinearLayout 宽度高度
  10. android 在Resources 中定义arrays