android绘制板

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-08-24 08:19 被阅读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;
        }
    }
    

    相关文章

      网友评论

        本文标题:android绘制板

        本文链接:https://www.haomeiwen.com/subject/zajciltx.html