发现一个水印添加方法,感觉很有意思。原理是在布局中放一个全屏的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之页面添加水印相关推荐

  1. Android滚动页面位置指示器:CircleIndicator

     Android滚动页面位置指示器:CircleIndicator CircleIndicator是github上的一个开源的用于页面滚动时候的位置指示器,指示当前页面在总的页面中的位置和前后位置 ...

  2. Android 欢迎页面的编写

    今天,简单讲讲Android如何编写欢迎界面. 不废话了,在网上查了资料,都不是很好的方法.自己把自己的代码贴出来. manifest文件 <activity android:name=&quo ...

  3. Android 一个页面上下两个ListView的页面显示

    Android 一个页面上下两个ListView,当上面的ListView过长时,下面的List基本没有了滑动空间,查阅网上资料,解决办法基本是采用ScrollView做页面滑动,notifyData ...

  4. Vue项目在页面添加水印功能

    Vue项目在页面添加水印功能 创建watermark.js文件 let watermark = {}let setWatermark = (str) => {let id = '1.234523 ...

  5. Android刷新页面

    代码改变世界 Android刷新页面 继承 extends Activity /*** 调用onCreate(), 目的是刷新数据, 从另一activity界面返回到该activity界面时, 此方法 ...

  6. Android设置页面Preference出现红色下划线

    昨天发现了一个问题,在设置的关于设备选项中,有一栏是设备名称,在修改为非英文单词后,上下滑动,会出现一条红色下划线提示,如下图所示 经过博主的摸索发现,这是由于Android的拼写检查服务造成的,在设 ...

  7. Android登录页面设计

    说到开发app,肯定要设计页面布局是吧,我也是个审美不好的人,对于开发app也只能写好功能,页面美观做不好. 今天呢,给大家奉上一篇android登录页面,当然这个页面也是我写的,不过可能并不美观,只 ...

  8. Android的页面设计

    Android的页面设计 作者: 本次任务完成时间: 开发工具与关键技术: 完成模块功能:功能实现 用LinearLayout布局,根据项目需要布局,orientation="vertica ...

  9. android 界面切换监听,Android切换页面--setContentView

    setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...

最新文章

  1. 【Redis系列】深入浅出Redis主从复制之哨兵模式【实践】
  2. c mysql 查不到数据_怎么检测不到MYSQL数据库的存在
  3. 12篇学通C#网络编程——第一篇 基础之进程线程
  4. DevOps/.NET 微服务 秋季分享会领优惠门票
  5. jakarta ee_Jakarta EE 8状态
  6. 第三次大转型:中国居住新十年报告
  7. Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
  8. python画超长图-python 画长图
  9. matlab gui 钢琴,基于MATLAB中的GUI设计的钢琴界面设计并能发声
  10. 铁路车辆工程使用计算机软件,铁路车辆工程论文
  11. PCB设计时应该考虑的几个问题
  12. 2020美容师(初级)考试题库及美容师(初级)模拟考试
  13. Fine Dining(最短路应用)
  14. vue向后台请求数据的配置和方法
  15. 织网模板html5,织网及织网模具、安全护具的制作方法
  16. 七夕情人节表白HTML前端代码
  17. 维棠下载flv出错 kmplayer背黑锅
  18. [安卓]解决因为冻结了系统程序导致不能开机的问题
  19. 进阶篇-安卓系统:3.初识安卓手机内置传感器
  20. Pyhon轻松实现大数据风控模型开发-toad库

热门文章

  1. 深入浅出contenteditable富文本编辑器
  2. Vue3比Vue2有什么优势/区别
  3. 神盾特工hive_漫威电影宇宙编年史(一):宇宙大爆炸到灭霸家乡的消亡
  4. 露营不在朋友圈,快乐在诗和远方
  5. sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类
  6. windows11切换输入法的快捷键是什么?win11怎样修改输入法快捷键
  7. 硬盘磁头坏数据有办法恢复吗?硬盘开盘数据恢复
  8. 内存测试内存检测工具
  9. C#一年级100以内的加减训练
  10. 线程并发锁竞争--java锁jvm锁--synch锁分析