zoukankan      html  css  js  c++  java
  • ImageSpan

    自定义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 + ";;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;
        }
    }
  • 相关阅读:
    puremvc 入门与思考
    PureMVC QA:Where Should I Declare Notification Name Constants
    PureMVC QA:Why can't Proxies hear Notifications?
    EPUB CFI 规范
    Flex中添加大量组件时内存占用问题
    保垒机SSH登录脚本
    用JAVA给JSON进行排版
    基于ProGuard-Maven-Plugin的自定义代码混淆插件
    Protostuff自定义序列化(Delegate)解析
    Web服务图片压缩,nginx+lua生成缩略图
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5982212.html
Copyright © 2011-2022 走看看