当前位置: 移动技术网 > 移动技术>移动开发>Android > android实现文字水印效果 支持多行水印

android实现文字水印效果 支持多行水印

2019年08月01日  | 移动技术网移动技术  | 我要评论

特点

支持多行水印,支持自定义角度,支持自定义文字大小。

原理:

使用一个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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网