通过学习制作长微博工具来了解水印的制作,及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进 ...
随机推荐
- centos命令行常用操作
1.查看某个端口占用 lsof -i tcp:80 2.查看是否安装了防火墙 service iptables status 查看是否启用防火墙/etc/init.d/iptables status ...
- 153. Find Minimum in Rotated Sorted Array(leetcode, binary search)
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/ leetcode 的题目,binary ...
- Selenium入门8 js调用
execute_script 可以执行js和jquery脚本 示例如下:修改百度首页的按钮字体颜色,按钮隐藏,按钮显示 #coding=utf-8 # 调用js jquery from seleniu ...
- IOS http协议 总结
HTTP协议1.面试题常见:聊一下HTTP协议(协议的完整的通信过程) ============================================================ 一.一 ...
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
- Java-笔记1
/* 对第一个java程序进行总结 1. java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编 ...
- mysql关键字了解
unsigned 无符号 就是没有负数 列-1 -2 auto_increment 自增 comment 注释 primary key 主键 foreign key () references ...
- git fetch和push的区别
获取fetch的用法 git-fetch用于从另一个reposoitory下载objects和refs. 命令格式为:git fetch … 其中表示远端的仓库路径.git remote add or ...
- 五、@property的参数
格式:@property(参数1,参数2)类型 名字: 参数可有可无 如:@property int age; @property (nonatomic,retain) UIButton* btn; ...
- input或其他元素的左上角和左下角单独圆角实现
border-bottom-left-radius:6px;/*左下角圆角*/ border-top-left-radius: 6px;/*左上角圆角*/