Android之页面添加水印
发现一个水印添加方法,感觉很有意思。原理是在布局中放一个全屏的TextView,然后给它设置一个水印背景。
先上个效果图:
自定义WaterMarkBgView 水印背景类:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import java.util.List;/*** Created by zachary on 2020/04/23.* 页面添加水印*/
public class WaterMarkBgView extends Drawable {private Paint paint = new Paint();private List<String> labels;private Context context;private int degress; // 角度private int fontSize; // 字体大小 单位sp/*** 初始化构造** @param context 上下文* @param labels 水印文字列表 多行显示支持* @param degress 水印角度* @param fontSize 水印文字大小*/public WaterMarkBgView(Context context, List<String> labels, int degress, int fontSize) {this.labels = labels;this.context = context;this.degress = degress;this.fontSize = fontSize;}@Overridepublic void draw(@NonNull Canvas canvas) {int width = getBounds().right;int height = getBounds().bottom;// 画布背景色canvas.drawColor(Color.parseColor("#40F3F5F9"));// 水印文字的颜色paint.setColor(Color.parseColor("#50AEAEAE"));paint.setAntiAlias(true);paint.setTextSize(sp2px(context, fontSize));canvas.save();canvas.rotate(degress);float textWidth = paint.measureText(labels.get(0));int index = 0;for (int positionY = height / 10; positionY <= height; positionY += height / 10 + 80) {float fromX = -width + (index++ % 2) * textWidth;for (float positionX = fromX; positionX < width; positionX += textWidth * 2) {int spacing = 0;//间距for (String label : labels) {canvas.drawText(label, positionX, positionY + spacing, paint);spacing = spacing + 50;}}}canvas.restore();}@Overridepublic void setAlpha(@IntRange(from = 0, to = 255) int alpha) {}@Overridepublic void setColorFilter(@Nullable ColorFilter colorFilter) {}@Overridepublic int getOpacity() {return PixelFormat.UNKNOWN;}public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;return (int) (spValue * fontScale + 0.5f);}
}
使用方式:
// 添加水印
List<String> labels = new ArrayList<>();
labels.add("你");
labels.add("我");
labels.add("他");/**
* context 上下文
* labels 水印文字列表 多行显示支持
* degress 水印角度
* fontSize 水印文字大小sp
*/
bg_tv.setBackground(new WaterMarkBgView(mActivity, labels, -30, 14));
为这个全局的TextView bg_tv,设置一个背景即可。同样可以根据自己的需要自定义WaterMarkBgView 。
Android之页面添加水印相关推荐
- Android滚动页面位置指示器:CircleIndicator
Android滚动页面位置指示器:CircleIndicator CircleIndicator是github上的一个开源的用于页面滚动时候的位置指示器,指示当前页面在总的页面中的位置和前后位置 ...
- Android 欢迎页面的编写
今天,简单讲讲Android如何编写欢迎界面. 不废话了,在网上查了资料,都不是很好的方法.自己把自己的代码贴出来. manifest文件 <activity android:name=&quo ...
- Android 一个页面上下两个ListView的页面显示
Android 一个页面上下两个ListView,当上面的ListView过长时,下面的List基本没有了滑动空间,查阅网上资料,解决办法基本是采用ScrollView做页面滑动,notifyData ...
- Vue项目在页面添加水印功能
Vue项目在页面添加水印功能 创建watermark.js文件 let watermark = {}let setWatermark = (str) => {let id = '1.234523 ...
- Android刷新页面
代码改变世界 Android刷新页面 继承 extends Activity /*** 调用onCreate(), 目的是刷新数据, 从另一activity界面返回到该activity界面时, 此方法 ...
- Android设置页面Preference出现红色下划线
昨天发现了一个问题,在设置的关于设备选项中,有一栏是设备名称,在修改为非英文单词后,上下滑动,会出现一条红色下划线提示,如下图所示 经过博主的摸索发现,这是由于Android的拼写检查服务造成的,在设 ...
- Android登录页面设计
说到开发app,肯定要设计页面布局是吧,我也是个审美不好的人,对于开发app也只能写好功能,页面美观做不好. 今天呢,给大家奉上一篇android登录页面,当然这个页面也是我写的,不过可能并不美观,只 ...
- Android的页面设计
Android的页面设计 作者: 本次任务完成时间: 开发工具与关键技术: 完成模块功能:功能实现 用LinearLayout布局,根据项目需要布局,orientation="vertica ...
- android 界面切换监听,Android切换页面--setContentView
setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...
最新文章
- 【Redis系列】深入浅出Redis主从复制之哨兵模式【实践】
- c mysql 查不到数据_怎么检测不到MYSQL数据库的存在
- 12篇学通C#网络编程——第一篇 基础之进程线程
- DevOps/.NET 微服务 秋季分享会领优惠门票
- jakarta ee_Jakarta EE 8状态
- 第三次大转型:中国居住新十年报告
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
- python画超长图-python 画长图
- matlab gui 钢琴,基于MATLAB中的GUI设计的钢琴界面设计并能发声
- 铁路车辆工程使用计算机软件,铁路车辆工程论文
- PCB设计时应该考虑的几个问题
- 2020美容师(初级)考试题库及美容师(初级)模拟考试
- Fine Dining(最短路应用)
- vue向后台请求数据的配置和方法
- 织网模板html5,织网及织网模具、安全护具的制作方法
- 七夕情人节表白HTML前端代码
- 维棠下载flv出错 kmplayer背黑锅
- [安卓]解决因为冻结了系统程序导致不能开机的问题
- 进阶篇-安卓系统:3.初识安卓手机内置传感器
- Pyhon轻松实现大数据风控模型开发-toad库