libGdx专题

android绘制板

2021-08-24  本文已影响0人  大旺旺的弟弟小旺旺

绘制板

绘制板的制作主要使用了画笔和路径两个东西。

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读