广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现文字和图片混排(文字环绕图片)效果
  • 785
分享到

Android实现文字和图片混排(文字环绕图片)效果

图片Android 2022-06-06 09:06:17 785人浏览 安东尼
摘要

本文实例讲述了Android实现文字和图片混排(文字环绕图片)效果。分享给大家供大家参考,具体如下: 在平时我们做项目中,或许有要对一张图片或者某一个东西进行文字和图片说明,这

本文实例讲述了Android实现文字和图片混排(文字环绕图片)效果。分享给大家供大家参考,具体如下:

在平时我们做项目中,或许有要对一张图片或者某一个东西进行文字和图片说明,这时候要求排版美观,所以会出现文字和图片混排的情况,如图:

这种情况就是上下两个文字说明是连续在一起的,这就要求我们计算上面的文字说明怎么和下面的文字说明连贯结合在一起呢,这就要求我们进行计算了,下面给出代码,代码中也有详细的注释,原理也很简单。

因为算是比较简单,直接就在activity中去计算了:


package com.example.test; 
import android.app.Activity; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.ViewTreeObserver; 
import android.widget.ImageView; 
import android.widget.TextView; 
public class MainActivity extends Activity { 
  boolean imageMeasured = false; 
  TextView tv_right; 
  TextView tv_bottom; 
  static final String text = "叶凡:小说主角,与众老同学在泰山聚会时一同被九龙拉棺带离地球," + 
      "进入北斗星域,得知自己是荒古圣叶凡 叶凡体。历险禁地,习得源术,斗圣地世家,战太古生物," + 
      "重组天庭,叶凡辗转四方得到许多际遇和挑战,功力激增,眼界也渐渐开阔。一个浩大的仙侠世界," + 
      "就以他的视角在读者面前展开。姬紫月:姬家小姐,出场年龄十七岁。被叶凡劫持一同经历青铜古殿历险," + 
      "依靠碎裂的神光遁符解除禁制,反过来挟持叶凡一同进入太玄派寻找秘术。" + 
      "在叶凡逃离太玄后姬紫月在孔雀王之乱中被华云飞追杀,又与叶凡[2]相遇,被叶凡护送回姬家" + 
      ",渐渐对叶凡产生微妙感情。后成为叶凡的妻子,千载后于飞仙星成仙,在叶凡也进入仙路后再见庞博:" + 
      "叶凡大学时最好的朋友,壮硕魁伟,直率义气。到达北斗星域后因服用了圣果被灵墟洞天作为仙苗," + 
      "在青帝坟墓处为青帝十九代孙附体离去,肉身被锤炼至四极境界。后叶凡与黑皇镇压老妖神识," + 
      "庞博重新掌控自己身躯,取得妖帝古经和老妖本体祭炼成的青莲法宝,习得妖帝九斩和天妖八式," + 
      "但仍伪装成老妖留在妖族。出关后找上叶凡,多次与他共进退。星空古路开启后由此离开北斗," + 
      "被叶凡从妖皇墓中救出,得叶凡授予者字秘、一气化三清,与叶凡同闯试炼古路,一起建设天庭"; 
  // 屏幕的高度 
  int screenWidth = 0; 
  // 总共可以放多少个字 
  int count = 0; 
  // textView全部字符的宽度 
  float textTotalWidth = 0.0f; 
  // textView一个字的宽度 
  float textWidth = 0.0f; 
  Paint paint = new Paint(); 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv_right = (TextView) findViewById(R.id.test_tv_right); 
    tv_bottom = (TextView) findViewById(R.id.test_tv_bottom); 
    final ImageView imageView = (ImageView) findViewById(R.id.test_image); 
    imageView.setImageResource(R.drawable.ee); 
    screenWidth = getWindowManager().getDefaultDisplay().getWidth(); 
     
    textWidth = tv_right.getTextSize(); 
    paint.setTextSize(textWidth); 
     
    ViewTreeObserver vto = imageView.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      public boolean onPreDraw() { 
        if (!imageMeasured) { 
          imageMeasured = true; 
          int height = imageView.getMeasuredHeight(); 
          int width = imageView.getMeasuredWidth(); 
          drawImageViewDone(width, height); 
        } 
        return imageMeasured; 
      } 
    }); 
  } 
  private void drawImageViewDone(int width, int height) { 
    // 一行字体的高度 
    int lineHeight = tv_right.getLineHeight(); 
    // 可以放多少行 
    int lineCount = (int) Math.ceil((double) height / (double) lineHeight); 
    // 一行的宽度 
    float rowWidth = screenWidth - width - tv_right.getPaddingLeft() - tv_right.getPaddingRight(); 
    // 一行可以放多少个字 
    int columnCount = (int) (rowWidth / textWidth); 
    // 总共字体数等于 行数*每行个数 
    count = lineCount * columnCount; 
    // 一个TextView中所有字符串的宽度和(字体数*每个字的宽度) 
    textTotalWidth = (float) ((float) count * textWidth); 
    measureText(); 
    tv_right.setText(text.substring(0, count)); 
    // 检查行数是否大于设定的行数,如果大于的话,就每次减少一个字符,重新计算行数与设定的一致 
    while (tv_right.getLineCount() > lineCount) { 
      count -= 1; 
      tv_right.setText(text.substring(0, count)); 
    } 
    tv_bottom.setPadding(0, lineCount * lineHeight - height, 0, 0); 
    tv_bottom.setText(text.substring(count)); 
  } 
   
  private void measureText() { 
    String string = text.substring(0, count); 
    float size = paint.measureText(string); 
    int remainCount = (int) ((textTotalWidth - size) / textWidth); 
    if (remainCount > 0) { 
      count += remainCount; 
      measureText(); 
    } 
  } 
}

其中xml文件布局如下:


<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="Http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
  <RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
    <ImageView 
      android:id="@+id/test_image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scaleType="fitXY" /> 
    <TextView 
      android:id="@+id/test_tv_right" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/test_image" 
      android:gravity="fill_horizontal" 
      android:paddingLeft="7dp" 
      android:textSize="16sp" /> 
    <TextView 
      android:id="@+id/test_tv_bottom" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/test_image" 
      android:gravity="fill_horizontal" 
      android:textSize="16sp" /> 
  </RelativeLayout> 
</ScrollView>

代码很少,原理也很简单,后来发现这种做法在大部分手机运行是完美的,但是少部分手机还是有点问题。是什么问题呢,是在我们测量textView的长度的是,因为是我们刚刚进行setText,然后马上进行测量,这样得到的结果是不正确的,所以大家可以优化一下。温馨提示,当我们setText之后,可以延时一些时间再去测量,这样获取的值就是挣钱的了,当然那个延迟的时间很短50毫秒就可以了,因为我们要相信textView的绘制速度还是很快的。

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:控制Android LED灯颜色的代码实例详解Android应用层制作LED指示灯android显示TextView文字的倒影效果实现代码Android实现文字翻转动画的效果Android实现文字滚动效果Android自定义Dialog实现文字动态加载效果Android中使用TextView实现文字跑马灯效果Android编程实现文字倒影效果的方法Android Shader应用开发之霓虹闪烁文字效果Android编程实现类似天气预报图文字幕垂直滚动效果的方法Android基于ViewFilpper实现文字LED显示效果示例


--结束END--

本文标题: Android实现文字和图片混排(文字环绕图片)效果

本文链接: https://www.lsjlt.com/news/26483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现文字和图片混排(文字环绕图片)效果
    本文实例讲述了Android实现文字和图片混排(文字环绕图片)效果。分享给大家供大家参考,具体如下: 在平时我们做项目中,或许有要对一张图片或者某一个东西进行文字和图片说明,这...
    99+
    2022-06-06
    图片 Android
  • CSS中怎么实现文字环绕图片效果
    CSS中怎么实现文字环绕图片效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。CSS实现文字环绕图片效果文字环绕图片,在Word里只要cl...
    99+
    2022-10-19
  • 怎么用css的float实现文字环绕图片效果
    本篇内容介绍了“怎么用css的float实现文字环绕图片效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-19
  • Android实现图片文字轮播特效
    本文实例讲解了Android实现图片文字轮播特效的详细代码,分享给大家供大家参考,具体内容如下 图片轮播是类似知乎日报上的一个轮播效果,如下图。 好了直接进入正题,首先是出示...
    99+
    2022-06-06
    图片 轮播 Android
  • Android下Button实现图文混排效果
    Button实现图文混排效果,具体内容如下一、简介本文介绍两种图文混排方式android:drawableTop="@drawable/star"实现文字上有图片当然有上下左右等等SpannableString的ImageSpan实现图文混...
    99+
    2023-05-30
    android button 图文混排
  • Android实现图片文字识别
    导言 OCR,tess-two ,openCV等晕人的东西先分清,OCR,tess-two是图片文字识别,而openCV是图像识别比对,对于更复杂的图片文字识别需求可以采用百度云人工...
    99+
    2022-11-12
  • Python实现文字pdf转换图片pdf效果
    目录前言思路代码展示前言 为什么会做这个? 因为我们把word转化为pdf,wps默认转化为文字pdf,而图片pdf要会员。 网上确实也有网站可以实现免费的,但是未必安全。 思路 我...
    99+
    2022-11-13
  • CSS中如何模拟float实现center文字左右环绕图片
    这篇文章将为大家详细讲解有关CSS中如何模拟float实现center文字左右环绕图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是文字左右环绕图片?就是下图的效果:效果的CSS代码可以点击这里 查...
    99+
    2023-06-08
  • Python实现多张图片合成文字的效果
    目录前言一、图片批量下载1.下载图片2.检测图片数量3.查找相似图片二、图片马赛克1.使用photomosaic库实现图片马赛克2.计算颜色相似度实现图片马赛克前言 前段时间看到有人...
    99+
    2022-11-11
  • css如何实现文字环绕效果
    这篇文章主要讲解了“css如何实现文字环绕效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css如何实现文字环绕效果”吧! 方...
    99+
    2022-10-19
  • phpcms添加图片文字水印效果
    关键字描述:效果 文字 图片 添加 里面 使用 在后 这个 配置 http://download 文字图片水印效果只能在编辑器里面使用,使用水印效果,服务器端必须支持GD 库,这个在后台的基本配置里面是自定检测的。ht...
    99+
    2022-06-12
    效果 文字 图片 添加 使用 里面 这个 在后 配置 支持
  • Python怎么实现文字pdf转换图片pdf效果
    本篇内容主要讲解“Python怎么实现文字pdf转换图片pdf效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现文字pdf转换图片pdf效果”吧!代码展示先安装依赖pip&n...
    99+
    2023-06-29
  • Android代码实现图片和文字上下布局
    在Android开发中经常会需要用到带文字和图片的button,下面来给大家介绍使用radiobutton实现图片和文字上下布局或左右布局。代码很简单就不给大家多解释了。 布...
    99+
    2022-06-06
    布局 图片 Android
  • css中怎么实现文字图片垂直居中效果
    本篇文章给大家分享的是有关css中怎么实现文字图片垂直居中效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 代码...
    99+
    2022-10-19
  • Python如何实现多张图片合成文字的效果
    本篇内容主要讲解“Python如何实现多张图片合成文字的效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现多张图片合成文字的效果”吧!一、图片批量下载首先我们需要从百度下载大...
    99+
    2023-07-02
  • windows中coreldraw怎么实现文字图形绕排
    今天小编给大家分享一下windows中coreldraw怎么实现文字图形绕排的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所...
    99+
    2022-12-02
    windows coreldraw
  • CSS怎么实现文字与图片同排和文字上下垂直居中
    这篇文章主要介绍了CSS怎么实现文字与图片同排和文字上下垂直居中的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS怎么实现文字与图片同排和文字上下垂直居中文章都会有所收获,下...
    99+
    2022-10-19
  • Python实现给图片添加文字或图片水印
    目录前言PIL的Image模块的基本介绍Python代码实现文字水印Python代码实现图片水印前言 图片加水印有什么好处?在现今的数字化时代,网络上的图片泛滥,盗图现象也越来越严重...
    99+
    2023-05-19
    Python图片添加文字水印 Python图片添加图片水印 Python图片添加水印 Python添加水印
  • SpringBoot+OCR 实现图片文字识别
    本篇介绍的是基于百度人工智能接口的文字识别实现。 1. 注册百度云,获得AppID 此处百度云非百度云盘,而是百度智能云。 大家可进入https://cloud.baidu.com/...
    99+
    2022-11-12
  • python怎么实现图片转文字
    本文小编为大家详细介绍“python怎么实现图片转文字”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么实现图片转文字”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。python图片转文字用pytho...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作