特点
支持多行水印,支持自定义角度,支持自定义文字大小。
原理:
使用一个TextView 占据整个页面。在TextView基础上面打水印。
用法:
具体的view在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
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); } } |
具体的用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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源码地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/fulushan/article/details/80082805?utm_source=blogxgwz4