android实现文字水印效果 支持多行水印
程序员文章站
2023-09-04 15:13:59
特点
支持多行水印,支持自定义角度,支持自定义文字大小。
原理:
使用一个textview 占据整个页面。在textview基础上面打水印。
用法:
具体的vie...
特点
支持多行水印,支持自定义角度,支持自定义文字大小。
原理:
使用一个textview 占据整个页面。在textview基础上面打水印。
用法:
具体的view在
package cn.fulushan.watermark.view; 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; /** * created by fulushan on 18/4/5. */ 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); } }
具体的用法
public class mainactivity extends appcompatactivity { private textview bg_tv; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bg_tv = findviewbyid(r.id.bg_tv); simpledateformat createtimesdf1 = new simpledateformat("yyyy-mm-dd"); list<string> labels = new arraylist<>(); labels.add("用户名:张三"); labels.add("日期:"+ createtimesdf1.format(new date())); labels.add("不可扩散"); bg_tv.setbackgrounddrawable(new watermarkbg(mainactivity.this,labels,-30,13)); } }
效果图
github
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android实现弹出列表、单选、多选框
下一篇: 我就彻夜难眠