先看效果:
先说实现方式:
1、首先先用文字创建一个Bitmap 图片。
Bitmap bitmap = Bitmap.createBitmap(420, 240, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setColor(Color.GRAY);
paint.setAlpha(80);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(40);
Path path = new Path();
path.moveTo(0, 150);
path.lineTo(160 * 2, 0);
canvas.drawTextOnPath(gText, path, 0, 20, paint);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
bitmap.recycle();在一个空白的背景上画出文字内容,此处的通过设置一个斜向上的path,然后在这个path上写文字,生成一个斜向上方形的文字。
最后得到一个Bitmap.
2、将生成的bitmap 一个view上
BitmapDrawable drawable = new BitmapDrawable(bitmap);
drawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
drawable.setDither(true);
view.setBackgroundDrawable(drawable );
最后贴上工具类代码:如果只想要背景图片 用drawTextToBitmap(), 如果要直接给一个view设置上背景 直接使用setWaterMarkTextBg()方法。
public class WaterMarkTextUtil {
//设置背景
public void setWaterMarkTextBg(View view, Context gContext, String gText) {
view.setBackgroundDrawable(drawTextToBitmap(gContext, gText));
}
/**
* 生成水印文字图片
*/
public BitmapDrawable drawTextToBitmap(Context gContext, String gText) {
gText=gText+" daydao";
if (ACache.get(gContext).getAsBitmap(gText) != null) {
BitmapDrawable drawable = new BitmapDrawable(ACache.get(gContext).getAsBitmap(gText));
drawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
drawable.setDither(true);
return drawable;
}
try {
Bitmap bitmap = Bitmap.createBitmap(420, 240, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setColor(Color.GRAY);
paint.setAlpha(80);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(40);
Path path = new Path();
path.moveTo(0, 150);
path.lineTo(160 * 2, 0);
canvas.drawTextOnPath(gText, path, 0, 20, paint);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
ACache.get(gContext).put(gText, bitmap);
BitmapDrawable drawable = new BitmapDrawable(bitmap);
drawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
drawable.setDither(true);
bitmap.recycle();
return drawable;
} catch (Exception e) {
}
return null;
}
}