通过学习制作长微博工具来了解水印的制作,及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进 ...
随机推荐
- 洛谷 P1215 [USACO1.4]母亲的牛奶 Mother's Milk
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- failed: No module named 'catkin_pkg' Make sure that you have installed "catkin_pkg"
https://stackoverflow.com/questions/43024337/why-this-error-when-i-try-to-create-workspaces-in-ros# ...
- IOS 多线程-pthread
#import <pthread.h> @interface HMViewController () - (IBAction)btnClick; @end @implementation ...
- ELF文件格式与进程地址空间的联系
http://blog.csdn.net/q_l_s/article/details/52597330 三.分析在fork产生新进程中ELF文件格式与进程地址空间的联系 1.进程的虚拟地址空间 每个程 ...
- Kruskal算法求最小生成树
Kruskal算法是根据权来筛选节点,也是采用贪心算法. /// Kruskal ///初始化每个节点为独立的点,他的祖先为自己本身 void made(int n) { ; i<=n; i++ ...
- ios 创建自己的.a文件
1:首先创建个 静态工程(Cocoa Touch Static Library); 方法名字,一定要暴露在.h文件中, 2:分别在模拟器环境和真机环境下 Analyze (shift+command+ ...
- 2018.7.20 编程题: 写一个Singleton出来。
编程题: 写一个Singleton出来. Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 一般Singleton模式通常有几种种形式: 第一种形式: 定义 ...
- js 实现链表
我们通常会在c++这类语言中学习到链表的概念,但是在js中由于我们可以动态的扩充数组,加之有丰富的原生api.我们通常并不需要实现链表结构.由于突发奇想,我打算用js实现一下: 首先我们要创建链表: ...
- 配置伪静态(URL重写)
本篇借鉴了很多文章,这里做个记录. 有时我们的导航栏出现xx.aspx?id=x&name=xx 等等这样,会显得不好看,我们可以利用伪静态来美化我们的导航栏,伪静态的形式可以自己定义,本质还 ...
- C# continue语句
一.C# continue语句 continue语句在循环体中结束本次循环,而重新开始下一次循环. 语法格式如下: continue;二.示例 using System;using System. ...