public class WaterMarkBg 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 WaterMarkBg(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);}
}

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/icon_login_bg"android:orientation="vertical"><FrameLayoutandroid:id="@+id/ll_itembg"android:layout_width="match_parent"android:layout_height="match_parent"/><!--</ScrollView>-->
</RelativeLayout>

mainActivity

//水印背景
FrameLayout ll_itembg = findViewById(R.id.ll_itembg);
List<String> labels = new ArrayList<>();
labels.add("智慧安全运营");
labels.add(TimeUtils.getCurrentDate());
labels.add("编号999999");
ll_itembg.setBackgroundDrawable(new WaterMarkBg(this,labels,-30,13));

界面添加水印(多行)相关推荐

  1. Linux设置界面或命令行启动

    设置界面或命令行启动 以root的身份登陆,然后执行: #cd /etc #vi inittab 更改"id:5:initdefault:"语句即可. 其中5表示默认图形启动界面 ...

  2. Linux图形界面与命令行模式切换

    相信有不少的Linux初学者和我一样对图形界面与命令行模式的切换感觉到很懊恼,到底应该怎么才能切换,是不是只有重装系统才能不使用图形界面?答案是:不是.今天我们就一起来看一下在Linux中到底如何切换 ...

  3. CentOS图形界面和命令行切换

    2019独角兽企业重金招聘Python工程师标准>>> 1.图形界面到命令行按Ctrl+Alt+F2 2.命令行到图形界面按Ctrl+Alt+F1 转载于:https://my.os ...

  4. 简单谈谈图形界面和命令行的区别

    文章目录 前言 对比 图形用户界面 命令行 举个例子 适用场景 图形界面 命令行 总有例外 总结 前言 随着总结的文章越写越多,我发现自己是一个"追求完美"的人,但同时也是一个&q ...

  5. 07-2-theos实战: 给微信的发现”界面增加2行功能

    文章目录 需求 此教程所需要的工具/文件 分析 1. 根据TableView找到它的数据源, 修改数据源方法 2. 获取微信的脱壳的Mach-O文件 2.1 获取微信的存储路径 2.2 查看Mach- ...

  6. linux命令行使用ppt,linux图形界面与命令行.ppt

    <linux图形界面与命令行.ppt>由会员分享,可在线阅读,更多相关<linux图形界面与命令行.ppt(43页珍藏版)>请在人人文库网上搜索. 1.第3章 图形界面与命令行 ...

  7. 使用IDEA界面或者命令行进行git cherry-pick

    使用场景: 代码已经提交了好几次才想起来其中有几次提交是要尽快上线的.没办法,只能进行cherry pick了. 操作过程: 例如:我目前的代码分支是2198,目标上线分支是2243 idea界面 1 ...

  8. delphi刷新界面所选行丢失问题

    2019独角兽企业重金招聘Python工程师标准>>> procedure TFram.ado_khAfterPost(DataSet: TDataSet); var IDs: st ...

  9. 欢迎界面java_Linux命令行欢迎界面美化

    默认的SSH命令行登录欢迎界面如下 [c:\~]$ Connecting to10.x.13.x:22... Connection established. To escape to local sh ...

最新文章

  1. vuejs linux windows,vue.js环境在window和linux安装
  2. kuka机器人if逻辑编程_KUKA机器人调试的程序语法是什么
  3. 搭建属于自己的wiki
  4. 吴恩达老师机器学习教程中文笔记-在线版
  5. Apache Spark RDD和Java流
  6. python列表各元素修改为int类型
  7. jq输出文本_如何用 Linux 命令行工具解析和格式化输出 JSON | Linux 中国
  8. 很有用很有效的操作之批量操作一组图片
  9. 3-3Tensor和机器学习的关系
  10. java中如何判断一个String 是否可以强制转换成Integer
  11. 【元胞自动机】基于matlab保守策略元胞自动机三车道(不开放辅路,软件园不影响)交通流模型【含Matlab源码 1293期】
  12. android studio 模拟器很慢,解决AndroidStudio模拟器卡慢的问题
  13. Python实现猜拳游戏
  14. 内存卡 无法格式化 修复命令
  15. 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程
  16. IDEA连接MySQL数据库时 schemas不显示数据
  17. 案例研究 | Soul是如何破解Z世代社交密码的?
  18. 2022年5月26日【Jiawei_Z】C# 基础教程 -- 各种快捷键的使用
  19. 多因子权重优化方法比较
  20. 忘记区块链技术,融入区块链思维

热门文章

  1. Matthew20211117
  2. 新的一年,怎么制定个人目标,做好十年规划?
  3. CAD中的相对坐标和绝对坐标
  4. 基于FPGA的VGA显示设计(一)
  5. python怎么导入pandas库_Python之2-Pandas数据导入导出
  6. 生存分析系列教程(一)使用生信人工具盒进行生存分析
  7. 【转载】刷百度空间访问量、极速提升访问数、有图、有软件、下载
  8. 如何进行成功的创业 程序员创业白皮书
  9. 防止ACCESS数据库被下载
  10. windows 10 忘记密码