package com.wistron.WiCamera; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathEffect; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; /** * http://www.cnblogs.com/feisky/archive/2010/09/12/1824320.html * * @author WH1107063 * */ public class AuxiliaryLine extends View { private static float rate = 0.618f; private int previewwidth; private int previewheight; private int type; private boolean is3D; private Paint myPaint; @Override public boolean onTouchEvent(MotionEvent event) { Log.e("touch event in overlayview", "ok"); if (event.getAction() == MotionEvent.ACTION_DOWN) { type++; type = type % 3; type=2; invalidate(); } return false; } public AuxiliaryLine(Context context, AttributeSet attributeSet) { super(context, attributeSet); previewwidth = getWidth(); previewheight = getHeight(); Log.e("AuxiliaryLine", " 长宽为" + previewwidth + "*" + previewheight); type = 0; myPaint = new Paint(); myPaint.setColor(Color.rgb(230, 230, 230)); myPaint.setStyle(Paint.Style.STROKE); myPaint.setStrokeWidth(1); myPaint.setAntiAlias(true); PathEffect effects = new DashPathEffect(new float[]{8,8,8,8},0.5f); myPaint.setPathEffect(effects); } public void setSize(int previewwidth, int previewheight) { this.previewwidth = previewwidth; this.previewheight = previewheight; invalidate(); } /** * 设置辅助线种类,0为隐藏,1为平均分,2为黄金比例分割 * * @param type */ public void setLineType(int type) { this.type = type; type=2; invalidate(); } public void setDimension(boolean is3D) { this.is3D = is3D; invalidate(); } protected void onDraw(Canvas canvas) { int width=previewwidth/3; int height=previewheight/3+4; if (is3D) { switch (type) { case 0: break; case 1: canvas.drawLine(0, previewheight / 4, previewwidth, previewheight / 4, myPaint); canvas.drawLine(0, previewheight * 3 / 4, previewwidth, previewheight * 3 / 4, myPaint); canvas.drawLine(previewwidth / 8, 0, previewwidth / 8, previewheight, myPaint); canvas.drawLine(previewwidth * 3 / 8, 0, previewwidth * 3 / 8, previewheight, myPaint); canvas.drawLine(previewwidth * 5 / 8, 0, previewwidth * 5 / 8, previewheight, myPaint); canvas.drawLine(previewwidth * 7 / 8, 0, previewwidth * 7 / 8, previewheight, myPaint); break; case 2: canvas.drawLine(0, previewheight * (1 - rate), previewwidth, previewheight * (1 - rate), myPaint); canvas.drawLine(0, previewheight * rate, previewwidth, previewheight * rate, myPaint); canvas.drawLine(previewwidth * (1 - rate) / 2, 0, previewwidth * (1 - rate) / 2, previewheight, myPaint); canvas.drawLine(previewwidth * rate / 2, 0, previewwidth * rate / 2, previewheight, myPaint); canvas.drawLine(previewwidth * (2 - rate) / 2, 0, previewwidth * (2 - rate) / 2, previewheight, myPaint); canvas.drawLine(previewwidth * (1 + rate) / 2, 0, previewwidth * (1 + rate) / 2, previewheight, myPaint); break; } } else { switch (type) { case 0: break; case 1: canvas.drawLine(0, previewheight / 4, previewwidth, previewheight / 4, myPaint); canvas.drawLine(0, previewheight * 3 / 4, previewwidth, previewheight * 3 / 4, myPaint); canvas.drawLine(previewwidth / 4, 0, previewwidth / 4, previewheight, myPaint); canvas.drawLine(previewwidth * 3 / 4, 0, previewwidth * 3 / 4, previewheight, myPaint); break; case 2: Path path1 = new Path(); path1.moveTo(previewwidth/2-width/2, previewheight/2-height*2/5); path1.lineTo(previewwidth/2+width/2,previewheight/2-height*2/5); canvas.drawPath(path1, myPaint); Path path2 = new Path(); path2.moveTo(previewwidth/2-width*2/5, previewheight/2-height/2); path2.lineTo(previewwidth/2-width*2/5,previewheight/2+height/2); canvas.drawPath(path2, myPaint); Path path3 = new Path(); path3.moveTo(previewwidth/2+width*2/5, previewheight/2-height/2); path3.lineTo(previewwidth/2+width*2/5,previewheight/2+height/2); canvas.drawPath(path3, myPaint); Path path4 = new Path(); path4.moveTo(previewwidth/2-width/2, previewheight/2+height*2/5); path4.lineTo(previewwidth/2+width/2,previewheight/2+height*2/5); canvas.drawPath(path4, myPaint); // canvas.drawLine(0, previewheight * (1 - rate), previewwidth, // previewheight * (1 - rate), myPaint); // canvas.drawLine(0, previewheight * rate, previewwidth, // previewheight * rate, myPaint); // canvas.drawLine(previewwidth * (1 - rate), 0, previewwidth // * (1 - rate), previewheight, myPaint); // canvas.drawLine(previewwidth * rate, 0, previewwidth * rate, // previewheight, myPaint); break; } } } }