通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示
长微博工具非常有用,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中的内容在图片中换行显示的更多相关文章
- ArcGIS Engine制作DIY地图工具
		本节将向你介绍,利用ToolStrip制作自定义GIS工具条. 步骤如下: ①向ToolStrip中添加一个Button ②向该Button的lmg属性添加图片素材,并将Button的图片比例(Ima ... 
- WPF学习11:基于MVVM Light 制作图形编辑工具(2)
		本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTarget ... 
- 音频工具kaldi部署及模型制作调研学习
		语音识别简介 语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR).计算机语音识别(英语:Comput ... 
- WPF学习12:基于MVVM Light 制作图形编辑工具(3)
		本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ... 
- 《零基础学习Python制作ArcGIS自定义工具》课程简介
		Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ... 
- H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
		代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ... 
- 制作镜像文件工具packer
		openstack镜像制作要在openstack上创建虚拟机,必然要使用到虚拟机镜像. 对于普通用户,可以使用已经创建好的虚拟机镜像.一般是操作系统官方构建并提供的. 某些用户可以有自己独特的需求,需 ... 
- 阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)
		继前面介绍过ICON-FONT的制作后,找了几个ICON库都是国外的今天偶然发现阿里巴巴的图标矢量库,www.iconfont.cn用了之后感觉很强大,丰富的图标库(集合阿里妈妈&淘宝的图标库 ... 
- 使用python制作时间戳转换工具
		使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ... 
随机推荐
- JavaScript 编写随机四位数验证码(大小写字母和数字)
			1.JavaScript编写随机四位数验证码,用到的知识点为: a.Math对象的随机数:Math.random() b.Math对象的取整 :Math.floor() c.处理所需要的下标个数 ... 
- Linux安装 NTFS 支持
			my system kernel Version is 2.6.18-128.el5 在这个地址下载了 kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10 ... 
- 如何在VMware ubuntu linux虚拟机中安装VMware tools
			VMware Tools可以实现在主机<->虚拟机之间拷贝文字.文件等功能.本文讲述如何在VMware ubuntu linux虚拟机中安装VMware tools. 测试环境: VMwa ... 
- Java UUID Generator(JUG)
			UG 是一个纯 Java 的 UUID 生成器. UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金 会 (OS ... 
- Android(java)学习笔记65:Clock App 编写报错02
			1. 首先之间看错误: 07-13 10:07:55.354: E/AndroidRuntime(8008): FATAL EXCEPTION: main 07-13 10:07:55.354: E/ ... 
- Netbackup-Oracle数据库恢复演练(上)
			目录 第一章NBU实施内容 1 第二章 环境准备 1 2.1添加LICENSE: 1 2.2安装配置NBU客户端(linux,unix相同) 2 2.3配置并验证oracle备份脚本 3 2.4添加备 ... 
- 问题 D: C++ 习题 输出日期时间--友元函数
			题目描述 设计一个日期类和时间类,编写display函数用于显示日期和时间.要求:display函数作为类外的普通函数,分别在Time和Date类中将display声明为友元函数.在主函数中调用dis ... 
- Git永久删除commit--[非教程]
			假设当前分支为master,当前的commit情况如下,现在需要删除commit_id_2和commit_id_4: commit_id_1 commit_id_2 commit_id_3 commi ... 
- SqlServer中怎么删除重复的记录(表中没有id)
			SqlServer中怎么删除重复的记录(表中没有id) 其实我在别的网址也查到过删除重复的记录,不知道我是我SqlServer2012版本太低还是啥原因 delete from scwhere (c# ... 
- mysql 按值排序
			order by FIELD(AuditorStatus,3,0,1,2) laravel 写法 $data = $query->orderByRaw(\DB::Raw('FIELD(Audit ... 
