自定义ImageSpan继承类,可以设置图片大小和位置

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.style.ImageSpan; import com.xuehu365.xuehu.utils.LogHelp; /**
* Created by Administrator on 2016/10/20.
*/
public class MyImageSpan extends ImageSpan {
public MyImageSpan(Context arg0, int arg1) {
super(arg0, arg1);
} public int getSize(Paint paint, CharSequence text, int start, int end,
Paint.FontMetricsInt fm) {
Drawable d = getDrawable();
// Drawable d2 = zoomDrawable(d, 50, 50);
Rect rect = d.getBounds();
if (fm != null) {
FontMetricsInt fmPaint = paint.getFontMetricsInt();
int fontHeight = fmPaint.bottom - fmPaint.top;
int drHeight = rect.bottom - rect.top; int top = drHeight / 2 - fontHeight / 4;
int bottom = drHeight / 2 + fontHeight / 4; fm.ascent = -bottom;
fm.top = -bottom;
fm.bottom = top;
fm.descent = top;
}
return rect.right;
} @Override
public void draw(Canvas canvas, CharSequence text, int start, int end,
float x, int top, int y, int bottom, Paint paint) {
Drawable b = getDrawable();
canvas.save();
int transY = 0;
transY = ((bottom - top) - b.getBounds().bottom) / 2 + top;
canvas.translate(x, transY);
b.draw(canvas);
canvas.restore();
} public Drawable zoomDrawable(Drawable drawable, int w, int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);// drawable转换成bitmap
Matrix matrix = new Matrix(); // 创建操作图片用的Matrix对象
float scaleWidth = ((float) w / width); // 计算缩放比例
LogHelp.i("move", "width:" + width + ";;w:" + w + ";;scaleWidth:" + scaleWidth);
float scaleHeight = ((float) h / height);
matrix.postScale(scaleWidth, scaleHeight); // 设置缩放比例
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); // 建立新的bitmap,其内容是对原bitmap的缩放后的图
return new BitmapDrawable(newbmp); // 把bitmap转换成drawable并返回
} public Bitmap drawableToBitmap(Drawable drawable)// drawable 转换成bitmap
{
int width = drawable.getIntrinsicWidth(); // 取drawable的长宽
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 取drawable的颜色格式
Bitmap bitmap = Bitmap.createBitmap(width, height, config); // 建立对应bitmap
Canvas canvas = new Canvas(bitmap); // 建立对应bitmap的画布
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas); // 把drawable内容画到画布中
return bitmap;
}
}

最新文章

  1. win7中 SQL server 2005无法连接到服务器,错误码:18456
  2. Ogre中OIS的输入的使用
  3. sql评估期已过如何解决该问题
  4. EntityFramework动态多条件查询与Lambda表达式树
  5. 今天在看UWP蓝牙的例子
  6. opencv3-core之基本操作
  7. Redis + php扩展的安装与配置(windows)
  8. centos6.4搭建基于ftp的yum源让本地局域网服务器使用
  9. WebView重定向新开界面问题-b
  10. session的介绍与简单使用
  11. 微信小程序开闸,关于入口、推广、场景的一些观察与思考
  12. iOS中MVC等设计模式详解
  13. Flex XML搜索、匹配
  14. 判断iframe页面是否加载完成
  15. 【算法和数据结构】_16_小算法_IntToStr: 将整型数据转换为字符串
  16. MySQL Binlog--binlog_format参数
  17. /bin/ls: Permission denied
  18. tp5+layui 实现上传大文件
  19. squid白名单
  20. jzoj5864

热门文章

  1. ItemsSource绑定后ScrollViewer不复位
  2. 重写Equals为什么要同时重写GetHashCode
  3. 【leetcode】Remove Duplicates from Sorted List (easy)
  4. 【leetcode】Factorial Trailing Zeroes(easy)
  5. 【linux】配置SSH免密码登陆
  6. C++基础练习题(一): 查找最短单词
  7. 使用按钮控制HTML5背景音乐开关
  8. php图片防盗链的小测试
  9. SQL语句题库
  10. python基础——偏函数