图文混排实现文字图片居中

2023-11-01

本文只是将洋神文章中的部分摘录出来,方便以后查看,实现图文混排setSpan不管文字比图片大还是图片比文字大都可以居中显示。

原文链接http://www.sohu.com/a/150059234_611601

 

实现类

public class CenterImageSpan extends ImageSpan {

    public CenterImageSpan(@NonNull Context context, int resourceId) {
        super(context, resourceId);
    }

    @Override
    public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) {
        Drawable drawable = getDrawable();
        canvas.save();
        Paint.FontMetricsInt fm = paint.getFontMetricsInt();

        // y+ascent 得到文字内容的顶部坐标,y+descent得到文字的底部坐标
        // (文字顶部坐标 + 文字底部坐标) / 2 得到文字中间线的坐标
        // 偏移量 = 中线位置坐标 - 图片底部位置坐标
        int transY = ((y + fm.descent) + (y + fm.ascent)) / 2 - drawable.getBounds().bottom / 2;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图文混排实现文字图片居中 的相关文章

  • 在 Android 中动态填充年份的微调器?

    我一直在绞尽脑汁试图让它发挥作用 我想动态地将 1900 年到当前年份的年份输入到旋转器中 我认为使用 XML 定义的数组不可能做到这一点 但是我可以使用数组适配器来做到这一点吗 这是我到目前为止所拥有的 ArrayList
  • Android 构建 gradle 在特定设备上失败

    我面临一个奇怪的问题 当我编译我的应用程序以在 Android 7 0 的设备上运行它时 它可以工作 但是当我尝试为 Android 4 2 1 的设备进行编译时 它会失败并出现以下错误 错误 任务 app transformClasses
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • 在屏幕上随机生成一个圆圈并将其设为绿色或红色

    所以我一直在尝试制作一个游戏应用程序 它可以在 Android 屏幕上随机显示带有文本的红色按钮或带有文本的绿色按钮 如果有人可以帮助我 我将不胜感激 另外 如果有人知道如何做到这一点 我想慢慢地产生更快的酷优势 谢谢 SuppressLi
  • 为网络和/或持久存储序列化 Android Bundle?

    我需要序列化一个全面的应用程序 游戏 状态 以便通过网络传输或保存到磁盘并在以后检索 当然 捆绑包用于在多个用例中保存 恢复状态 因此使用它们将是理想的选择 但是 由于某种原因 Bundle 不可序列化 寻找解决方案只发现了将 Bundle
  • 使用 POST 将数据从 Android 发送到 AppEngine Datastore

    抱歉 如果这是一个简单的问题 但我只是不知道我应该做什么 而且我认为我有点超出了我的深度 我想将数据从 Android 应用程序发送到在 Google App Engine 上运行的应用程序 数据必须从那里写入数据存储区 我的数据主要采用对
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • 安卓;在 AdapterViewFlipper 上设置输入/输出动画:未知的动画师名称翻译

    我有一些非常简单的动画 可以与 ViewFlipper 完美配合 但如果我尝试在 AdapterViewFlipper 输入 输出上设置它们 我会收到运行时错误 未知的动画师名称翻译 查看每个方法的相应方法 看起来 ViewFlipper
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Admob - 没有广告可显示

    你好 我尝试制作一些在 Android 手机上显示广告的示例程序 并尝试在 v2 2 的模拟器上测试它 代码中的一切似乎都很好 但调试器中的 AdListener 表示 响应消息为零或空 onFailedToReceiveAd 没有广告可显
  • SambaFileInputStream 和 FileInputStream 有什么不同?

    我需要从 samba 服务器流式传输视频 并且我使用 nanohttpd 在我的项目中创建简单的服务器 当我使用本地文件中的 fileinputstream 时 视频视图可以按设置播放视频 http localhost 8080 publi
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct

随机推荐

  • fastdfs安装部署整理

    一 fastdfs环境搭建 下面准备 2 个环境模拟部署并测试 准备工作 主服务器 192 168 100 10 从服务器 192 168 100 11 步骤1 了解 fastDFS 原理 这次是最简单的 storage 同步 不涉及多 t
  • SQL Part 1 --- 简单的SQL查询

    SQL 简单的SQL查询 SQL中的数据类型 SQL中的表 Tables 简单的SQL查询 简单SQL查询的执行步骤 在查询中链接多个表 复杂SQL查询的执行步骤 Banking Example SQL中的数据类型 Characters C
  • spring security oauth2——AbstractAuthenticationProcessingFilter

    AbstractAuthenticationProcessingFilter的作用 abstractAuthenticationProcessingFilter的职责也就非常明确 处理所有HTTP Request和Response对象 并将
  • 通过zipkin来追踪调用链

    最近被一个问题困扰了两天 一个接口突然就特别慢 差不多要两分多钟才能返回 找问题一直没有头绪 项目采用的是springcloud微服务框架 服务之间的调用链特别的多 就算是看日志也不知道看哪一个日志 很难定位到问题所在 后来问同事 同事说看
  • 多媒体视频处理的一些基本概念

    1 帧 在最早的电影里面 一幅静止的图像被称做一 帧 Frame 影片里的画面是每一秒钟有24帧 为什么是24帧 这个数字是怎么来的 因为人类眼睛的视觉暂留现象正好符合每秒24帧的标准 所以用多也没有意义还会浪费电影胶片 增加成本 所以就是
  • python3 面向对象编程知识点介绍

    python3 面向对象编程介绍 简阶 第1章 面向对象设计 第2章 Python 对象 第3章 对象相似时 第4章 异常捕获 第5章 何时使用面向对象编程 第6章 Python 数据结构 第7章 Python 面向对象的捷径 python
  • 【数据库】往数据库中赋值时出现“Data too long for colum ‘XXX‘ at row 1”的解决方案之一

    说明 我直接用insert给表格的字段赋值时 某个变量出现了 Data too long for colum XXX at row 1 的错误 然后网上找了一堆教程 其实不对 首先你应该看 出现问题的这个字段是什么类型 出现问题的这个字段是
  • linux 网络编程

    linux网络编程 一 网络编程概述 1 概述 2 TCP UDP 3 端口号作用 二 字节序 三 socket编程步骤 四 linux提供的API简析 1 连接协议 2 连接地址 3 地址转换API 4 监听 5 连接 6 数据收发 7
  • Mysql 创建触发器 学习教程

    触发器 trigger 监视某种情况 并触发某种操作 触发器经常用于加强数据的完整性约束和业务规则等 触发器创建语法四要素 1 监视地点 table 2 监视事件 insert update delete 3 触发时间 after befo
  • 使用FORCE训练的脉冲神经网络中的监督学习(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1第一代神经网络 1 2 第二代神经网络 BP 神经网络 1 3 第三代神经网络 脉冲神经网络 2 运
  • CentOS下CGAL开发环境配置

    目录 1 必要的说明 1 1 简介 1 2 软件安装说明 2 依赖软件安装 2 1 GMP MPFR MPC GCC 2 2 Boost 2 3 CMake 2 4 Qt 3 CGAL 4 测试 4 1 构建一个Example 4 2 使用
  • WebSell管理工具--中国蚁剑安装教程以及初始化

    简介 中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装 GitHub项目地址 https github com AntSwordProject Windows下载安装 百度网盘下载链接 链接 https pan bai
  • vue配置别名

    在项目根目录下新建vue config js文件 添加类似如下代码 表示src目录 module exports configureWebpack resolve alias components components common com
  • Cesium源码结构及说明

    文章目录 目录 文章目录 前言 一 Cesium源码结构 二 源码编译 1 安装npm 2 开始编译 总结 前言 前面提了一些Cesium大概情况 本章主要讲述Cesium源码结构及说明 提示 以下是本篇文章正文内容 下面案例可供参考 一
  • 如何使用java调用易班登录API获取个人账号信息(一)

    关于这篇文章 笔者近期和小伙伴接了校方的一个小小小项目 要求使用易班APP的账号 这意味着需要调用易班官方的登录API 下面介绍使用java语言作为后端 在自己的网站如何接入易班的登录API 轻应用 移动应用的操作大同小异 关于改造成前后端
  • viso画图时如何让右侧显示设置形状格式栏

    选中一个形状 右击 点击设置形状格式 就出来了 我也琢磨了好久
  • batchsize、iteration、epoch之间的关系

    batchsize iteration epoch之间的关系 有的时候总是会弄错batchsize iteration epoch之间的关系 现在终于明白了 1 batchsize是批次大小 假如取batchsize 24 则表示每次训练时
  • [HFCTF2020]EasyLogin

    HFCTF2020 EasyLogin 继续刷题 打开环境 发现是一个登录页面 F12一下 发现有一个js可以看看看到了js代码 但是用处似乎不大 它提示用的是koa框架 了解一下koa目录的基本结构 我们访问 controllers ap
  • Vim配置以及操作

    目录 一 光标控制 单位级 单词级 块级 二 打开文件 查找内容 在 Vim 中打开文件 文档内查找内容 行内查找 匹配查找 文件历史buffer 三 插入 修改内容 插入内容 删除 并保存到 Vim 剪贴板 复制 粘贴 粘贴 合并 替换
  • 图文混排实现文字图片居中

    本文只是将洋神文章中的部分摘录出来 方便以后查看 实现图文混排setSpan不管文字比图片大还是图片比文字大都可以居中显示 原文链接http www sohu com a 150059234 611601 实现类 public class