长微博工具非常有用,140字的要求可能阻止你写更多的内容,于是长微博工具应运而生,虽然网上有很多长微博工具,但是我都不是很满意,所以自己想做一个,通过做这个长微博工具,我学习到了很多东西,有两个难点,一个是怎么制作水印,另一个是水印制作成功了,怎么让水印文字多行显示!废话不多说了,先上效果图吧!

生成之后的图片如下:

在这里我就不多解释了,也不多说了,代码中解释非常详细,已经写好了,相信大家肯定能看明白。关键代码如下:

/**
* 将文字添加到图片上
*/
private void makeTxtToImage() {
String content = weiboContentTv.getText().toString();
// 获取到背景图片
Bitmap photo = BitmapFactory.decodeResource(this.getResources(),
R.drawable.weibo_bg); // 获得layoutImage宽度,这里其实就是屏幕的宽度
int totalWidth = layoutImage.getWidth();
// 获得背景图片的高度
int totalHeight = photo.getHeight();
// 得到文本框的宽度
int textWidth = weiboContentTv.getWidth(); // 计算文字的起点
int xWidth = (totalWidth - textWidth) / 2;
// 建立一个空的Bitmap
Bitmap icon = Bitmap.createBitmap(totalWidth, totalHeight,
Bitmap.Config.ARGB_8888);
// 初始化画布绘制的图像到icon上
Canvas canvas = new Canvas(icon); Paint photoPaint = new Paint(); // 建立画笔
// Dither(图像的抖动处理,当每个颜色值以低于8位表示时,对应图像做抖动处理可以实现在可显示颜色总数比较低(比如256色)时还保持较好的显示效果
photoPaint.setDither(true); // 获取更清晰的图像采样
// 过滤
photoPaint.setFilterBitmap(true);// setDither()和setFilterBitmap()的具体含义不是很清楚,但是只要记住:设置上这两个方法,就可以是图像更清晰就行!
// 创建一个指定的新矩形的坐标
Rect src = new Rect(0, 0, totalWidth, totalHeight);
// 创建一个指定的新矩形的坐标
Rect dst = new Rect(0, 0, totalWidth, totalHeight);
// 将photo缩放或扩大到dst使用的填充区photoPaint
canvas.drawBitmap(photo, src, dst, photoPaint);
// 设置文字画笔
TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG
| Paint.DEV_KERN_TEXT_FLAG);
// 字体大小
textPaint.setTextSize(22.0f);
// 采用默认的宽度
textPaint.setTypeface(Typeface.DEFAULT);
// 文字画笔采用的颜色
textPaint.setColor(Color.BLACK);
// 设置阴影,这里不用阴影
// textPaint.setShadowLayer(3f, 1, 1,
// this.getResources().getColor(android.R.color.background_dark));// /**
* StaticLayout中参数的解释:
*
* 1.字符串子资源
*
* 2 .画笔对象
*
* 3.layout的宽度,字符串超出宽度时自动换行。
*
* 4.layout的样式,有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种。
*
* 5.相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。
*
* 6.相对行间距,0表示0个像素。
*
* 实际行间距等于这两者的和。
*
* 7.还不知道是什么意思,参数名是boolean includepad。
*/
StaticLayout layout = new StaticLayout(content, textPaint, textWidth,
Alignment.ALIGN_NORMAL, 1.2F, 0.0F, true);// 这个StaticLayout是让文字在图片中多行显示的关键,android之所以强大就是它已经帮你封装好了,通过对StaticLayout的设置就可以让EditText中的文字多行显示
canvas.translate(xWidth, 0);
layout.draw(canvas);
saveMyBitmap(icon);
} /**
* 保存图片至SD卡中
*
* @param bitmap
*/
public void saveMyBitmap(Bitmap bitmap) {
FileOutputStream fos = null;
try {
File file = new File(Environment.getExternalStorageDirectory()
.getAbsoluteFile() + File.separator + "longweibo");
if (!file.exists()) {
file.mkdirs();
}
fos = new FileOutputStream(new File(file, "longweibo"
+ System.currentTimeMillis() + ".jpg"));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "长微博生成失败!", Toast.LENGTH_SHORT)
.show();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Toast.makeText(MainActivity.this, "长微博生成成功!", Toast.LENGTH_SHORT)
.show();
} }

转载请注明出处:http://blog.csdn.net/loongggdroid/article/details/17591977

通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示的更多相关文章

  1. ArcGIS Engine制作DIY地图工具

    本节将向你介绍,利用ToolStrip制作自定义GIS工具条. 步骤如下: ①向ToolStrip中添加一个Button ②向该Button的lmg属性添加图片素材,并将Button的图片比例(Ima ...

  2. WPF学习11:基于MVVM Light 制作图形编辑工具(2)

    本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTarget ...

  3. 音频工具kaldi部署及模型制作调研学习

    语音识别简介 语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR).计算机语音识别(英语:Comput ...

  4. WPF学习12:基于MVVM Light 制作图形编辑工具(3)

    本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ...

  5. 《零基础学习Python制作ArcGIS自定义工具》课程简介

    Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...

  6. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权

    代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...

  7. 制作镜像文件工具packer

    openstack镜像制作要在openstack上创建虚拟机,必然要使用到虚拟机镜像. 对于普通用户,可以使用已经创建好的虚拟机镜像.一般是操作系统官方构建并提供的. 某些用户可以有自己独特的需求,需 ...

  8. 阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)

    继前面介绍过ICON-FONT的制作后,找了几个ICON库都是国外的今天偶然发现阿里巴巴的图标矢量库,www.iconfont.cn用了之后感觉很强大,丰富的图标库(集合阿里妈妈&淘宝的图标库 ...

  9. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

随机推荐

  1. JavaScript Date对象方法详细总结

    Date 对象方法 方法 描述 Date() 返回当日的日期和时间. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某 ...

  2. oracle-插入到数据库中为日期

    oracle中创建一个表,其中一个字段为date,当我们进行插入操作 create table xf_allsalestotal ( xf_txdate date not null, xf_store ...

  3. leetcode: 链表2

    1. copy-list-with-random-pointer(拷贝一个带随机指针的链表) A linked list is given such that each node contains a ...

  4. Android OpenGL ES 画球体

    近期由于兴趣所向.開始学习OpenGL绘图. 本文以"画球体"为点,小结一下近期所学. > 初识OpenGL ES 接触OpenGL是从Android開始的.众所周知,And ...

  5. 2018.9.7 ArrayList

    ArrayList简介 ArrayList核心源码 ArrayList源码分析 System.arraycopy()和Arrays.copyOf()方法 两者联系与区别 ArrayList核心扩容技术 ...

  6. Spring boot 集成三种拦截方式

    三种拦截方式分别为: javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor org.aspectj.lang. ...

  7. Vuex基础-State

    官方地址:https://vuex.vuejs.org/zh/guide/state.html 由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个 ...

  8. HTTP head meta

    HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源传 ...

  9. js 金额小写转换为大写

    <script> jQuery(document).ready(function () { //当金额文本框失去焦点时,自动将数字转化为大写填充到 大写的文本框中 $("#Amo ...

  10. 用FileReader对象获取图片base64代码并预览

    MDN中FileReader的详细介绍: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 用FileReader获取图片base ...