package com.roboo.like.netease.view; import com.roboo.like.netease.R; import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Path.FillType; import android.graphics.drawable.BitmapDrawable; import android.opengl.GLSurfaceView; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; public MySurfaceView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MySurfaceView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MySurfaceView(Context context) { this(context, null); } private void init() { this.mHolder = getHolder(); this.mHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { new Thread(new MyThread()).start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } // 内部类的内部类 class MyThread implements Runnable { @Override public void run() { Canvas canvas = mHolder.lockCanvas(null);// 获取画布 canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_surface_view_image), 0, 0, null); Paint mPaint = new Paint(); mPaint.setColor(Color.BLUE); Rect rect = new Rect(100, 100, getWidth() - 100, 250); canvas.drawRect(rect, mPaint); Paint paint = new Paint(); paint.setColor(Color.RED); Path path = new Path(); path.moveTo(150, 200); path.lineTo(200, 200); path.lineTo(175, 175); path.close(); drawWaterMask("添加图片水印 -- 123456",canvas); path.setFillType(FillType.WINDING); canvas.drawPath(path, paint); mHolder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 System.out.println("执行"); } /** * TODO draw water mask * * @param canvas */ private void drawWaterMask(String text, Canvas canvas) { int fontSize = 45; int width = canvas.getWidth(); int height = canvas.getHeight(); Path path = new Path(); path.moveTo(0,height); path.lineTo(width, 0); path.close(); Paint paint = new Paint(); paint.setColor(0x88ff0000); paint.setTextSize(fontSize); paint.setAntiAlias(true); paint.setDither(true); Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), bounds); int length = (int) Math.sqrt(width * width + height * height); int hOffset = (length - (bounds.right - bounds.left)) / 2; canvas.drawTextOnPath(text, path, hOffset, fontSize / 2, paint); } } }