杭州网站开发平均工资,wordpress多主题插件下载地址,wordpress 搭建个人博客,外贸网站优化软件Android 水印效果
本文主要介绍下android 中水印的实现效果.
实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印.
不多说,直接上代码吧:
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
i…Android 水印效果
本文主要介绍下android 中水印的实现效果.
实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印.
不多说,直接上代码吧:
import android.content.Context;
import android.content.res.Resources;
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.util.DisplayMetrics;public class WatermarkDrawable extends Drawable {private String watermarkText;private Paint paint;private boolean isOne;private int numX, numY;private int mWidth, mHeight, mOffSet, textWidth, textHeight;private Context mContext;public WatermarkDrawable(Context context, String text, boolean isOne) {watermarkText text;mContext context;this.isOne isOne;paint new Paint();paint.setColor(Color.GRAY);paint.setTextSize(50);paint.setAlpha(100);textWidth (int) paint.measureText(watermarkText);Paint.FontMetrics fontMetrics paint.getFontMetrics();textHeight (int) (fontMetrics.descent - fontMetrics.ascent);Resources resources mContext.getResources();DisplayMetrics dm resources.getDisplayMetrics();mWidth dm.widthPixels;mHeight dm.heightPixels;mOffSet ((mHeight - mWidth) 1);int max Math.max(mWidth, mHeight);numX max / (textWidth 50) 2;numY max / (textHeight 100) 2;}Overridepublic void draw(Canvas canvas) {if (isOne) {drawOneWaterMark(canvas);} else {drawFullWaterMark(canvas);}}private void drawOneWaterMark(Canvas canvas) {int width getBounds().width();int height getBounds().height();float textWidth paint.measureText(watermarkText);float x (width - textWidth) / 2;float y height / 2;canvas.drawText(watermarkText, x, y, paint);}private void drawFullWaterMark(Canvas canvas) {for (int i 0; i numY; i) {int yy (100 1) (100 textHeight) * i;for (int j 0; j numX; j) {float xx (i % 2) * (50 textWidth) / 2 j * (50 textWidth);canvas.drawText(watermarkText, xx, yy, paint);}}}Overridepublic void setAlpha(int alpha) {paint.setAlpha(alpha);}Overridepublic void setColorFilter(ColorFilter colorFilter) {paint.setColorFilter(colorFilter);}Overridepublic int getOpacity() {return PixelFormat.TRANSLUCENT;}
}这里只是简单实现下单个水印以及全局多个水印的效果, 后续水印的效果:如 旋转角度,水印的多少,水印文案的限制在继续优化吧.
设置水印的方式也很简单: WatermarkDrawable watermarkDrawable new WatermarkDrawable(this,测试, false);获取acitvity的根布局, 设置背景drawable即可.
我们可以通过调用setForeground方法, 让水印在整个页面的前台,从而不被页面中的组件遮挡. 效果如下: