Android 实现水印背景效果

本文介绍了如何在Android中创建并设置水印,包括设置字体大小、粗体、偏移量和对齐方式等方法,并提供了WaterMarkManager类的详细代码,用于全局配置和同步更新水印属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**

  • 同步设置水印字体大小(单位: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;

}

/**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值