1. 下载图片
public Runnable saveFileRunnable = new Runnable() {
@Override
public void run() {
try {
if (!TextUtils.isEmpty(filePath)) { //网络图片
// 对资源链接
URL url = new URL(filePath);
//打开输入流
InputStream inputStream = url.openStream();
//对网上资源进行下载转换位图图片
mBitmap = BitmapFactory.decodeStream(inputStream);
// mBitmap = zoomImg(mBitmap, 1920, 1104);
//设置修改图片大小
mBitmap = zoomImg(mBitmap, mBitmap.getWidth()*2, mBitmap.getHeight()*2);
inputStream.close();
}
saveFile(mBitmap);
mSaveMessage = "图片保存成功!";
} catch (IOException e) {
mSaveMessage = "图片保存失败!";
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
messageHandler.sendMessage(messageHandler.obtainMessage());
}
};
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i("pathq",""+pathq);
}
};
2. 加载画板
private ArrayList<Word> words = new ArrayList<Word>();
private ArrayList<CirclePath> circlePaths = new ArrayList<CirclePath>();
private ArrayList<RectPath> rectPaths = new ArrayList<RectPath>();
private ArrayList<OvalPath> ovalPaths = new ArrayList<OvalPath>();
private ArrayList<ArrowPath> arrowPaths = new ArrayList<ArrowPath>();
private ArrayList<LinexuPath> linexuPaths = new ArrayList<LinexuPath>();
private ArrayList<LinexuPath> linezhiPaths = new ArrayList<LinexuPath>();
private ArrayList<LinePath> linePaths = new ArrayList<LinePath>();
private ArrayList<XuPath> XuPaths = new ArrayList<XuPath>();
private boolean canDraw;
private PopupWindow popupWindow;
private LinePath currentLinPath;
private XuPath xuLinPath;
private CirclePath currentCirclePath;
private RectPath currentRectPath;
private OvalPath currentOvalPath;
private ArrowPath currentArrowPath;
private LinexuPath linexuPath;
private Paint mPaint;
private Path mPathssa;
private Path mPath;
private Matrix matrix = new Matrix();
private GestureDetector detector;
public CameraSurfaceView(Context context) {
super(context);
init(context);
}
public CameraSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CameraSurfaceView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(2);
paint.setStyle(Style.STROKE);
paint.setTextSize(25);
paint.setAntiAlias(true);
detector = new GestureDetector(listener);
}
private Paint eraserPaint;
private boolean isEraserModel;
private SimpleOnGestureListener listener = new SimpleOnGestureListener() {
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
float[] value = new float[9];
matrix.getValues(value);
float maxTranX = mBitmap.getWidth() * value[Matrix.MSCALE_X] - getWidth();
float maxTranY = mBitmap.getHeight() * value[Matrix.MSCALE_X] - getHeight();
if (value[Matrix.MSCALE_X] >= MIN_SCALE) {
float dx = -distanceX + value[Matrix.MTRANS_X];//计算出实际会偏移的量
float dy = -distanceY + value[Matrix.MTRANS_Y];
if (dx > 0) {//如果实际量超出边框就就把相对偏移量为零
dx = 0;
} else if (-dx > maxTranX) {
dx = 0;
} else {
dx = -distanceX;
}
if (dy > 0) {
dy = 0;
} else if (-dy > maxTranY) {
dy = 0;
} else {
dy = -distanceY;
}
matrix.postTranslate(dx, dy);
Log.i(TAG, "onScroll" + dx + ":" + dy + "mBitmap.getHeight()" + mBitmap.getHeight() + "value[Matrix.MSCALE_X]" + value[Matrix.MSCALE_X]);
post(CameraSurfaceView.this);
return true;
}
return false;
}
public boolean onDoubleTap(MotionEvent e) {
Log.i(TAG, "onDoubleTap");
float[] value = new float[9];
matrix.getValues(value);
if (value[Matrix.MSCALE_X] > MIN_SCALE) {
matrix.reset();
} else {
float px = e.getX();
float py = e.getY();
float sx = MAX_SCALE / value[Matrix.MSCALE_X];
float sy = MAX_SCALE / value[Matrix.MSCALE_Y];
matrix.postScale(sx, sy, px, py);
}
post(CameraSurfaceView.this);
return true;
}
};
private float mOldDist = 0;
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
if (canDraw) {
switch (currentDraw) {
case DRAW_PATH:
lineEvevn(event);
break;
case DRAW_WORD:
wordEven(event);
break;
case DRAW_CIRCLE:
circleEvent(event);
break;
case DRAW_RECT:
rectEvent(event);
break;
case DRAW_ARROW:
arrowEvent(event);
break;
case DRAW_OVAL:
ovalEvent(event);
break;
case DRAW_NOTHING:
if (!nothingEvent(event)) {
detector.onTouchEvent(event);
}
break;
case xu:
ovalEvent2(event);
break;
case zhi:
ovalEvent3(event);
break;
case zhilin :
ovalEvent4(event);
break;
default:
break;
}
return true;
}
return super.onTouchEvent(event);
}
private void ovalEvent2(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPathssa = new Path();
event.getX();
xuLinPath = new XuPath(new Path(), new Paint(paint));
xuLinPath.ge