ImageSpan使用时的坑(绘制出来图片大小不对的问题)

最近项目中用到图片加文字作为文本插入edittext中,删除添加时最为一个整体.就自然想到了ImageSpan的做法,但是使用new ImageSpan(Bitmap b)的时候遇到了很蒙蔽的问题,就是Bitmap放进去的时候老是发生缩放,刚开始尝试手动缩放,但是适配不了所有机型.就尝试看了下ImageSpan的内部处理方法.

 

public ImageSpan(Context context, Bitmap b, int verticalAlignment) {
    super(verticalAlignment);
    mContext = context;
    mDrawable = context != null
            ? new BitmapDrawable(context.getResources(), b)
            : new BitmapDrawable(b);
    int width = mDrawable.getIntrinsicWidth();
    int height = mDrawable.getIntrinsicHeight();
    mDrawable.setBounds(0, 0, width > 0 ? width : 0, height > 0 ? height : 0); 
}

最后3行就是主要思路了,这里面回得到传进来的Bitmap(这里会转化成Drawable)的固有值,再去查找方法

 

public int getScaledWidth(int targetDensity) {
    return scaleFromDensity(getWidth(), mDensity, targetDensity);
}

这个方法返回值就是上边获取的结果,这个方法里面看到2个参数 mDensity跟tarGetDensity就猜到了系统已经帮我们进行了缩放,tarGetDensity系统使用了默认值160,mDensity没有设置的话系统就会自动获取对应手机的mDensity,所以这里就可以将要作为ImageSpan的Bitmap设置setDensity(160),就不会发生缩放了

你可能感兴趣的:(ImageSpan使用时的坑(绘制出来图片大小不对的问题))