Android 实现水印背景效果

Android 实现水印背景效果(1) !最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧! 阅读详情

/**

  • 同步设置水印字体大小(单位:px)

  • @param textSize 字体大小(默认:42px)

*/

void setSyncTextSize(int textSize) {

if (mSync) {

setTextSize(30);

}

}

/**

  • 设置水印字体是否粗体

  • @param textBold 是否粗体(默认:false)

*/

publi 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 c void setTextBold(boolean textBold) {

mTextBold = textBold;

mTextPaint.setTypeface(mTextBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);

postInvalidate();

}

/**

  • 同步设置水印字体是否粗体

  • @param textBold 是否粗体(默认:false)

*/

void setSyncTextBold(boolean textBold) {

if (mSync) {

setTextBold(textBold);

}

}

/**

  • 设置水印X轴偏移量(单位:px)

  • @param dx X轴偏移量(默认:100px)

*/

public void setDx(int dx) {

this.mDx = dx;

postInvalidate();

}

/**

  • 同步设置水印X轴偏移量(单位:px)

  • @param dx X轴偏移量(默认:100px)

*/

void setSyncDx(int dx) {

if (mSync) {

setDx(dx);

}

}

/**

  • 设置水印Y轴偏移量(单位:px)

  • @param dy Y轴偏移量(默认:240px)

*/

public void setDy(int dy) {

this.mDy = dy;

postInvalidate();

}

/**

  • 同步设置水印Y轴偏移量(单位:px)

  • @param dy Y轴偏移量(默认:240px)

*/

void setSignDy(int dy) {

if (mSync) {

setDy(dy);

}

}

/**

  • 设置水印对齐方式

  • @param align 对齐方式(默认:Center)

*/

public void setAlign(Paint.Align align) {

this.mAlign = align;

postInvalidate();

}

/**

  • 同步设置水印对齐方式

  • @param align 对齐方式(默认:Center)

*/

void setSignAlign(Paint.Align align) {

if (mSync) {

setAlign(align);

}

}

/**

  • 销毁相关页面时调用(切记)

*/

public void onDestroy() {

if (mSync) {

WaterMarkManager.LIST.remove(this);

}

}

@Override

public boolean dispatchTouchEvent(MotionEvent event) {

return false;

}

@SuppressLint(“ClickableViewAccessibility”)

@Override

public boolean onTouchEvent(MotionEvent event) {

return false;

}

}

package com.hkdc.commonlib.warkmark;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.graphics.Paint;

import android.view.LayoutInflater;

import com.hkdc.commonlib.R;

import java.util.ArrayList;

import java.util.List;

/**

  • @author Leon (wshk729@163.com)

  • @date 2018/8/24

*/

public class WaterMarkManager {

static WaterMarkInfo INFO = null;

static String[] CONTENT = null;

static List LIST = new ArrayList<>();

/**

  • 设置水印全局配置信息

  • @param info 配置信息

*/

public static void setInfo(WaterMarkInfo info) {

INFO = info;

}

/**

  • 获取一个满屏水印View

  • @param activity activity

*/

@SuppressLint(“InflateParams”)

public static WaterMarkView getView(Activity activity) {

return (WaterMarkView) LayoutInflater.from(activity).inflate(R.layout.view_water_mark, null);

}

/**

  • WaterMarkInfo初始化判断

*/

private static void assertInitialized() {

if (INFO == null) {

INFO = WaterMarkInfo.create().generate();

}

}

/**

  • 同步设置全部水印文字信息

  • @param content 文字信息

*/

public static void setText(String… content) {

assertInitialized();

CONTENT = content;

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncText(content);

}

}

}

}

/**

  • 同步设置全部水印倾斜角度

  • @param degrees 倾斜角度(默认:-30)

*/

public static void setDegrees(int degrees) {

assertInitialized();

INFO.setDegrees(degrees);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncDegrees(degrees);

}

}

}

}

/**

  • 同步设置全部水印字体颜色

  • @param textColor 字体颜色(默认:#33000000)

*/

public static void setTextColor(int textColor) {

assertInitialized();

INFO.setTextColor(textColor);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncTextColor(textColor);

}

}

}

}

/**

  • 同步设置全部水印字体大小(单位:px)

  • @param textSize 字体大小(默认:42px)

*/

public static void setTextSize(int textSize) {

assertInitialized();

INFO.setTextSize(textSize);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncTextSize(textSize);

}

}

}

}

/**

  • 同步设置全部水印字体是否粗体

  • @param textBold 是否粗体(默认:false)

*/

public static void setTextBold(boolean textBold) {

assertInitialized();

INFO.setTextBold(textBold);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncTextBold(textBold);

}

}

}

}

/**

  • 同步设置全部水印X轴偏移量(单位:px)

  • @param dx X轴偏移量(默认:100px)

*/

public static void setDx(int dx) {

assertInitialized();

INFO.setDx(dx);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSyncDx(dx);

}

}

}

}

/**

  • 同步设置全部水印Y轴偏移量(单位:px)

  • @param dy Y轴偏移量(默认:240px)

*/

public static void setDy(int dy) {

assertInitialized();

INFO.setDy(dy);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSignDy(dy);

}

}

}

}

/**

  • 同步设置全部水印对齐方式

  • @param align 对齐方式(默认:Center)

*/

public static void setAlign(Paint.Align align) {

assertInitialized();

INFO.setAlign(align);

if (LIST.size() > 0) {

for (WaterMarkView view : LIST) {

if (view != null) {

view.setSignAlign(align);

}

}

}

}

}

view_water_mark.xml

<?xml version="1.0" encoding="utf-8"?>

<com.commonlib.WaterMarkView

xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”/>

import android.graphics.Color;

import android.graphics.Paint;

/**

  • @author Leon (wshk729@163.com)

  • @date 2018/8/24

*/

public class WaterMarkInfo {

private int mDegrees;

private int mTextColor;

private int mTextSize;

private boolean mTextBold;

private int mDx;

private int mDy;

private Paint.Align mAlign;

private WaterMarkInfo(int degrees, int textColor, int textSize, boolean textBold, int dx, int dy, Paint.Align align) {

mDegrees = degrees;

mTextColor = textColor;

mTextSize = textSize;

mTextBold = textBold;

mDx = dx;

mDy = dy;

mAlign = align;

}

public int getDegrees() {

return mDegrees;

}

public int getTextColor() {

return mTextColor;

}

public int getTextSize() {

return mTextSize;

}

public int getDx() {

return mDx;

}

public int getDy() {

return mDy;

}

public Paint.Align getAlign() {

return mAlign;

}

public int getAlignInt() {

switch (mAlign) {

case LEFT:

return 0;

case RIGHT:

return 2;

default:

return 1;

}

}

public boolean isTextBold() {

return mTextBold;

}

void setDegrees(int degrees) {

mDegrees = degrees;

}

void setTextColor(int textColor) {

mTextColor = textColor;

}

void setTextSize(int textSize) {

mTextSize = textSize;

}

void setTextBold(boolean textBold) {

mTextBold = textBold;

}

void setDx(int dx) {

mDx = dx;

}

void setDy(int dy) {

mDy = dy;

}

void setAlign(Paint.Align align) {

this.mAlign = align;

}

public static Builder create() {

return new Builder();

}

public static class Builder {

private int mDegrees;

private int mTextColor;

private int mTextSize;

private boolean mTextBold;

private int mDx;

private int mDy;

private Paint.Align mAlign;

private Builder() {

mDegrees = -30;

mTextColor = Color.parseColor(“#33000000”);

mTextSize = 35;

mTextBold = false;

mDx = 100;

mDy = 240;

mAlign = Paint.Align.CENTER;

}

/**

  • 设置水印文字倾斜度

  • @param degrees 文字倾斜度(默认:-30)

  • @return Builder

*/

public Builder setDegrees(int degrees) {

mDegrees = degrees;

return this;

}

/**

  • 设置水印文字颜色

  • @param textColor 文字颜色(默认:#33000000)

  • @return Builder

*/

public Builder setTextColor(int textColor) {

mTextColor = textColor;

return this;

}

/**

  • 设置水印文字大小(单位:px)

  • @param textSize 文字大小(默认:42px)

  • @return Builder

*/

public Builder setTextSize(int textSize) {

mTextSize = textSize;

return this;

}

/**

  • 设置水印文字是否加粗

  • @param textBold 文字加粗(默认:false)

  • @return Builder

*/

public Builder setTextBold(boolean textBold) {

mTextBold = textBold;

return this;

}

/**

  • 设置水印文字X轴间距(单位:px)

  • @param dx 文字X轴间距(默认:100px)

  • @return Builder

*/

public Builder setDx(int dx) {

mDx = dx;

return this;

}

/**

  • 设置水印文字Y轴间距(单位:px)

  • @param dy 文字Y轴间距(默认:240px)

  • @return Builder

*/

public Builder setDy(int dy) {

mDy = dy;

return this;

}

/**

  • 设置水印文字对齐方式

  • @param align 对齐方式(默认:Center)

  • @return Builder

*/

public Builder setAlign(Paint.Align align) {

mAlign = align;

return this;

}

/**

Android 11.0 12.0系统添加水印(仿安全模式水印) 11.0产品中由于项目需要,要添加商标的水印,所以功能差不多和安全模式的水印相同,进入安全模式的时候 左下角就有 安全模式 的水印 所以按照安全模式 添加水印 完成功能即可 1.查看SystemServer的相关代码找到安全模式的显示入口 路径:/frameworks/base/services/java/com/android/server/SystemServer.java private void startOtherServices() 中是启动其他服务的 而 if (safeMode) { 阅读详情

相关推荐

DDS信号发生器设计避坑指南:从AD9834配置到巴特沃斯滤波实战

本文详细解析了基于AD9834芯片的DDS信号发生器设计中的关键技术要点与常见陷阱,涵盖时钟源选择、寄存器配置时序、巴特沃斯滤波器设计等核心内容。针对中高频段信号质量优化,提供了实用的解决方案和代码示例,帮助工程师规避设计误区,提升信号发生器的性能和稳定性。

2y3u4i5o6p的博客 781

Android 实现水印背景效果,android开发模拟器

setText(text); } } /** 设置水印倾斜角度 @param degrees 倾斜角度(默认:-30) */ public void setDegrees(int degrees) { mDegrees = degrees; postInvalidate(); } /** 同步设置水印倾斜角度 @param degrees 倾斜角度(默认:-30) */ void setSyncDegrees(int degrees) { if (mSync) { setDegr

m0_64319112的博客 538

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6841

Android原生界面添加水印

水印

qq_33209777的博客 1672

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1253

RTKLIB中RTK定位原理(一)

1 模型 1.1 非差观测值 非差观测值与RTKLIB中PPP定位原理——观测模型部分中一致。 1.2 单间单差观测值 若两个接收机距离较近,经过站间单差,电离层对流层延迟可消除,卫星s的钟差以及初始相位被消除,中依然包含接收机初始相位。 1.3 站间星间双差观测值 经过站间星间双差,接收机钟差及初始相位被消除。 2 EKF参数估计 2.1 EKF法则 EKF法则与RTKLIB中PPP定位原理——观测模型部分中一致。 2.2 状态变量与时间更新 (1)状态变量 在RTK...

papunzal的博客 3811

Android 实现水印背景效果,android音频面试题

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!//字体大小 单位sp/**

2401_84149896的博客 1092

【AutoSAR】【EcuM】ECU状态管理

目录 一、EcuM架构位置 ​二、EcuM功能介绍 三、EcuM状态机 1.STARTUP阶段 2、UP状态 3、shutdown状态 4、休眠状态 5、OFF状态 一、EcuM架构位置 EcuM模块位于系统服务层,如下图红色方框里; 二、EcuM功能介绍 EcuM本身它管理着ECU在STARTUP, RUN,OFF,SLEEP,WAKEUP状态之间的相互切换。 责所有BSW的初始化以及去初始化 和ComM协作来管理网络状态,在需要时关闭ECU 管理所有的唤醒事件,并且在需要时

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3352

Android 实现页面水印

/可定义多条。

weixin_49372160的博客 765

【100%通过率】华为OD机试真题 Python 实现【高矮个子排队】【2023 Q2 | 100分】

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。移动距离的定义如下所示:第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。1:其实题目理解之后就知道,目标是要保证最小移动距离,且以高位为起点。2:try catch 异常处理。

MISAYAONE的博客 3144

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3811

Android 实现水印背景效果,移动开发者社区

} private void drawTexts(String[] ss, Paint paint, Canvas canvas, int x, int y) { Paint.FontMetrics fontMetrics = paint.getFontMetrics(); float top = fontMetrics.top; float bottom = fontMetrics.bottom; int length = ss.length; float total = (length - 1) * (

m0_64604042的博客 339

【灰度共生矩阵(GLCM)原理及代码实现】

文章主旨详细介绍灰度共生矩阵(Gray-Level Co-occurrence Matrix, GLCM)的生成原理、核心特征量及其在图像纹理分析中的应用,并提供了可运行的Python代码实现。该网页是一篇理论结合实践的优秀技术文章。它不仅清晰地解释了GLCM这一经典纹理分析工具背后的数学原理,还提供了完整、可复现的代码,非常适合计算机视觉或图像处理领域的学习者和开发者入门并实践灰度共生矩阵。读者可以通过运行代码来直观理解GLCM如何工作,并提取图像的纹理特征。

blotemj.blog.youkuaiyun.com 176

Android 实现水印背景效果(1),一起刷完了这份1307页的安卓面试宝典吧

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

2401_84149875的博客 771

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android 实现水印背景效果(2)

i < length;i++) {/**设置水印文字内容@param text 文字内容*/if (mText!/**同步设置水印文字内容@param text 文字内容*//**设置水印倾斜角度@param degrees 倾斜角度(默认:-30)*//**同步设置水印倾斜角度@param degrees 倾斜角度(默认:-30)*//**设置水印字体颜色@param textColor 字体颜色(默认:#33000000)

2401_84010865的博客 804

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Android 基础与底层机制面试题
下一篇: Android 支持库迁移到AndroidX
Java364102
博客等级 码龄5年 12粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值