Android 实现水印背景效果
【摘要】
项目中有需要加水印的需求,实现完效果图是这样的
什么看不清...
为了让大家看清效果,字体改了一下,正常应该是文章最上面那个的效果。话不多说,直接上代码
import android.annotation.SuppressLint;import android.content.Context;import android....
项目中有需要加水印的需求,实现完效果图是这样的
什么看不清...
为了让大家看清效果,字体改了一下,正常应该是文章最上面那个的效果。话不多说,直接上代码
-
import android.annotation.SuppressLint;
-
import android.content.Context;
-
import android.content.res.TypedArray;
-
import android.graphics.Canvas;
-
import android.graphics.Color;
-
import android.graphics.Paint;
-
import android.graphics.Rect;
-
import android.graphics.Typeface;
-
import android.text.TextPaint;
-
import android.util.AttributeSet;
-
import android.view.MotionEvent;
-
import android.view.View;
-
-
import com.hkdc.commonlib.R;
-
-
public class WaterMarkView extends View {
-
-
private static final String DEFAULT_SEPARATOR = "///";
-
private TextPaint mTextPaint = new TextPaint();
-
-
private String[] mText;
-
private int mDegrees;
-
private int mTextColor;
-
private int mTextSize=35;
-
private boolean mTextBold;
-
private int mDx;
-
private int mDy;
-
private Paint.Align mAlign;
-
private boolean mSync;
-
private int textWidth, textHeight;
-
-
public WaterMarkView(Context context) {
-
this(context, null);
-
}
-
-
public WaterMarkView(Context context, AttributeSet attrs) {
-
super(context, attrs);
-
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.WaterMarkView);
-
mDegrees = typedArray.getInt(R.styleable.WaterMarkView_water_mark_degree, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDegrees() : -30);
-
String text = typedArray.getString(R.styleable.WaterMarkView_water_mark_text);
-
if (text != null) {
-
mText = text.split(DEFAULT_SEPARATOR);
-
}
-
mTextColor = typedArray.getColor(R.styleable.WaterMarkView_water_mark_textColor, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getTextColor() : Color.parseColor("#33000000"));
-
mTextSize = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_textSize, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getTextSize() : 42);
-
mTextBold = typedArray.getBoolean(R.styleable.WaterMarkView_water_mark_textBold, WaterMarkManager.INFO != null && WaterMarkManager.INFO.isTextBold());
-
mDx = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_dx, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDx() : 100);
-
mDy = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_dy, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDy() : 240);
-
int align = typedArray.getInt(R.styleable.WaterMarkView_water_mark_align, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getAlignInt() : 1);
-
mAlign = align == 0 ? Paint.Align.LEFT : align == 2 ? Paint.Align.RIGHT : Paint.Align.CENTER;
-
mSync = typedArray.getBoolean(R.styleable.WaterMarkView_water_mark_sync, true);
-
typedArray.recycle();
-
-
setBackgroundColor(Color.TRANSPARENT);
-
mTextPaint.setAntiAlias(true);
-
mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
-
mTextPaint.setColor(mTextColor);
-
mTextPaint.setTextSize(mTextSize);
-
mTextPaint.setTypeface(mTextBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
-
mTextPaint.setTextAlign(mAlign);
-
-
mText = mText == null && mSync ? WaterMarkManager.CONTENT : mText;
-
-
textWidth = 0;
-
textHeight = 0;
-
if (mText != null && mText.length > 0) {
-
for (String s : mText) {
-
Rect tvRect = new Rect();
-
mTextPaint.getTextBounds(s, 0, s.length(), tvRect);
-
textWidth = textWidth > tvRect.width() ? textWidth : tvRect.width();
-
textHeight += (tvRect.height() + 10);
-
}
-
}
-
-
if (mSync) {
-
WaterMarkManager.LIST.add(this);
-
}
-
}
-
-
@Override
-
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
}
-
-
@Override
-
protected void onDraw(Canvas canvas) {
-
super.onDraw(canvas);
-
-
if (mText != null && mText.length > 0) {
-
int measuredWidth = getMeasuredWidth();
-
int measuredHeight = getMeasuredHeight();
-
-
if (measuredWidth == 0 || measuredHeight == 0) {
-
return;
-
}
-
-
int canvasLength = measuredWidth > measuredHeight ? measuredWidth : measuredHeight;
-
-
canvas.save();
-
canvas.rotate(mDegrees, measuredWidth / 2, measuredHeight / 2);
-
-
canvas.save();
-
int y = 0;
-
boolean odd = true;
-
while (y < canvasLength + textHeight) {
-
int x = odd ? 0 : -(textWidth + mDx) / 2;
-
while (x < canvasLength + textWidth) {
-
drawTexts(mText, mTextPaint, canvas, x, y);
-
x = x + textWidth + mDx;
-
}
-
y = y + textHeight + mDy;
-
odd = !odd;
-
}
-
canvas.restore();
-
}
-
}
-
-
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) * (bottom - top) + (fontMetrics.descent - fontMetrics.ascent);
-
float offset = total / 2 - bottom;
-
for (int i = 0; i < length; i++) {
-
float yAxis = -(length - i - 1) * (bottom - top) + offset;
-
canvas.drawText(ss[i], x, y + yAxis + 10, paint);
-
}
-
}
-
-
/**
-
* 设置水印文字内容
-
*
-
* @param text 文字内容
-
*/
-
public void setText(String... text) {
-
mText = text;
-
-
textWidth = 0;
-
textHeight = 0;
-
if (mText != null && mText.length > 0) {
-
for (String s : mText) {
-
Rect tvRect = new Rect();
-
mTextPaint.getTextBounds(s, 0, s.length(), tvRect);
-
textWidth = textWidth > tvRect.width() ? textWidth : tvRect.width();
-
textHeight += (tvRect.height() + 10);
-
}
-
}
-
postInvalidate();
-
}
-
-
/**
-
* 同步设置水印文字内容
-
*
-
* @param text 文字内容
-
*/
-
void setSyncText(String... text) {
-
if (mSync) {
-
setText(text);
-
}
-
}
-
-
/**
-
* 设置水印倾斜角度
-
*
-
* @param degrees 倾斜角度(默认:-30)
-
*/
-
public void setDegrees(int degrees) {
-
mDegrees = degrees;
-
postInvalidate();
-
}
-
-
/**
-
* 同步设置水印倾斜角度
-
*
-
* @param degrees 倾斜角度(默认:-30)
-
*/
-
void setSyncDegrees(int degrees) {
-
if (mSync) {
-
setDegrees(degrees);
-
}
-
}
-
-
/**
-
* 设置水印字体颜色
-
*
-
* @param textColor 字体颜色(默认:#33000000)
-
*/
-
public void setTextColor(int textColor) {
-
mTextColor = textColor;
-
mTextPaint.setColor(mTextColor);
-
postInvalidate();
-
}
-
-
/**
-
* 同步设置水印字体颜色
-
*
-
* @param textColor 字体颜色(默认:#33000000)
-
*/
-
void setSyncTextColor(int textColor) {
-
if (mSync) {
-
setTextColor(textColor);
-
}
-
}
-
-
/**
-
* 设置水印字体大小(单位:px)
-
*
-
* @param textSize 字体大小(默认:42px)
-
*/
-
public void setTextSize(int textSize) {
-
mTextSize = textSize;
-
mTextPaint.setTextSize(30);
-
postInvalidate();
-
}
-
-
/**
-
* 同步设置水印字体大小(单位:px)
-
*
-
* @param textSize 字体大小(默认:42px)
-
*/
-
void setSyncTextSize(int textSize) {
-
if (mSync) {
-
setTextSize(30);
-
}
-
}
-
-
/**
-
* 设置水印字体是否粗体
-
*
-
* @param textBold 是否粗体(默认:false)
-
*/
-
public 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;
-
}
-
}
-
<!--warkmark-->
-
<declare-styleable name="WaterMarkView">
-
<attr name="water_mark_degree" format="integer|reference" />
-
<attr name="water_mark_text" format="string|reference" />
-
<attr name="water_mark_textColor" format="color|reference" />
-
<attr name="water_mark_textSize" format="dimension|reference" />
-
<attr name="water_mark_textBold" format="boolean" />
-
<attr name="water_mark_dx" format="dimension|reference" />
-
<attr name="water_mark_dy" format="dimension|reference" />
-
<attr name="water_mark_align" format="dimension">
-
<enum name="LEFT" value="0" />
-
<enum name="CENTER" value="1" />
-
<enum name="RIGHT" value="2" />
-
</attr>
-
<attr name="water_mark_sync" format="boolean" />
-
</declare-styleable>
-
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
-
* <p>
-
*/
-
public class WaterMarkManager {
-
-
static WaterMarkInfo INFO = null;
-
static String[] CONTENT = null;
-
static List<WaterMarkView> 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
-
* <p>
-
*/
-
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;
-
}
-
-
/**
-
* 生成水印全局配置信息
-
*
-
* @return 配置信息
-
*/
-
public WaterMarkInfo generate() {
-
return new WaterMarkInfo(mDegrees, mTextColor, mTextSize, mTextBold, mDx, mDy, mAlign);
-
}
-
}
-
-
}
-
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 android.support.annotation.IntRange;
-
import android.support.annotation.NonNull;
-
import android.support.annotation.Nullable;
-
-
import java.util.List;
-
-
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;
-
}
-
-
@Override
-
public 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();
-
}
-
-
@Override
-
public void setAlpha(@IntRange(from = 0, to = 255) int alpha) {
-
-
}
-
-
@Override
-
public void setColorFilter(@Nullable ColorFilter colorFilter) {
-
-
}
-
-
@Override
-
public 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);
-
}
-
}
xml中 引用
-
<com.commonlib.WaterMarkView
-
android:singleLine="false"
-
android:id="@+id/wm"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
app:water_mark_align="CENTER"
-
app:water_mark_degree="-30"
-
app:water_mark_dx="100px"
-
app:water_mark_dy="240px"
-
app:water_mark_sync="true"
-
app:water_mark_text="再见孙悟空"
-
app:water_mark_textBold="false"
-
app:water_mark_textColor="@color/black"
-
app:water_mark_textSize="30px" />
activity中
-
private WaterMarkView wm;
-
-
wm = (WaterMarkView) findViewById(R.id.wm);
-
-
private void water() {
-
SharedPreferences jobcede = getSharedPreferences("jobcede", MODE_PRIVATE);
-
String userName = jobcede.getString("username", "");
-
String name = jobcede.getString("name", "");
-
wm.setText(name,userName);
-
}
核心的代码就这些,因为时间关系,完整的demo后续补充。希望对大家有所帮助。欢迎各位小伙伴加入我的qq群:开发一群:454430053 (付费)开发二群:537532956 (付费)开发三群:812695329(免费)这里已经有很多小伙伴在等你了,快来加入我们吧!
文章来源: wukong.blog.csdn.net,作者:再见孙悟空_,版权归原作者所有,如需转载,请联系作者。
原文链接:wukong.blog.csdn.net/article/details/109849305
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)