绘制板
绘制板的制作主要使用了画笔和路径两个东西。
private Paint mPaint = new Paint(){{
setColor(defaultColor); //画笔的颜色
setStrokeWidth(defaultSize);//画笔的大小
setStrokeJoin(Join.ROUND);///
setStrokeCap(Cap.ROUND);
setStyle(Style.STROKE);
}};
private Path mPath = new Path();
我们自定义一个view,让使用paint绘制出路径,所有的其他菜单都是为了设置paint的属性服务的。
path的获取方式:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mPath = new Path();
mPath.moveTo(event.getX(),event.getY());
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(event.getX(),event.getY());
invalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
draw方法是一直执行的方法,我们绘制出当前可以绘制的图形。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mPath!=null){
mPaint.setColor(defaultColor);
mPaint.setStrokeWidth(defaultSize);
canvas.drawPath(mPath,mPaint);
}
}
做一下修改 ,我们可以绘制多条路径,而不是下次绘制,上次绘制的就丢失了,下次绘制都会执行一次清屏操作,所以绘制的就看不到了。
所以可以每次按下之后,将路径存储起来,绘制的时候循环绘制,而不是仅仅绘制当前。
动画
视图动画:平移、旋转、缩放、透明它可以使用xml或者代码实现。
帧动画:多个图片,然后快速播放,一秒24帧
属性动画:属性动画可以进行监听,操作比视图动画多。
自定义view
public class DrawView extends View {
private int defaultColor = Color.BLACK;
private float defaultSize = 10f;
private Paint mPaint = new Paint(){{
setColor(defaultColor); //画笔的颜色
setStrokeWidth(defaultSize);//画笔的大小
setStrokeJoin(Join.ROUND);///
setStrokeCap(Cap.ROUND);
setStyle(Style.STROKE);
}};
private Path mPath = new Path();
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, AttributeSet attr){
super(context,attr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mPath!=null){
mPaint.setColor(defaultColor);
mPaint.setStrokeWidth(defaultSize);
canvas.drawPath(mPath,mPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mPath = new Path();
mPath.moveTo(event.getX(),event.getY());
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(event.getX(),event.getY());
invalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
网友评论