最近项目中用到图片加文字作为文本插入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),就不会发生缩放了