美文网首页
Android画布(签名区)

Android画布(签名区)

作者: 陆笪_刑道荣 | 来源:发表于2021-04-15 13:59 被阅读0次
    • 简介

    画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:
    1.Canvas 提供了绘图方法,可以向底层的位图绘制基本图形。
    2.Paint 也称为"刷子",Paint可以指定如何将基本图形绘制到位图上。
    3.Bitmap 绘图的表面。

    • 使用

    1.进行绘画操作(生成图片)

    @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
        //TODO
        }
    

    2.手指移动

    @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    touchDown(event);
                    break;
                case MotionEvent.ACTION_MOVE:
                    touchMove(event);
                    if (mCallback != null) {
                        mCallback.onMove();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    //将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上
                   //TODO
                    break;
            }
            // 更新绘制
            invalidate();
            return true;
        }
    
        // 手指点下屏幕时调用
        private void touchDown(MotionEvent event) {
            // 重置绘制路线
            mPath.reset();
            float x = event.getX();
            float y = event.getY();
            mX = x;
            mY = y;
            // mPath绘制的绘制起点
            mPath.moveTo(x, y);
        }
    
        // 手指在屏幕上滑动时调用
        private void touchMove(MotionEvent event) {
            final float x = event.getX();
            final float y = event.getY();
            final float previousX = mX;
            final float previousY = mY;
            final float dx = Math.abs(x - previousX);
            final float dy = Math.abs(y - previousY);
            // 两点之间的距离大于等于3时,生成贝塞尔绘制曲线
            if (dx >= 3 || dy >= 3) {
                // 设置贝塞尔曲线的操作点为起点和终点的一半
                float cX = (x + previousX) / 2;
                float cY = (y + previousY) / 2;
                // 二次贝塞尔,实现平滑曲线;previousX, previousY为操作点,cX, cY为终点
                mPath.quadTo(previousX, previousY, cX, cY);
                // 第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
                mX = x;
                mY = y;
            }
        }
    

    3.清除绘画

    //TODO
    Paint.setColor();
    Canvas.drawColor();
    invalidate();
    

    3.制作图片(这里压缩成JPEG格式的160*90大小,便于上传)

    //filename 是图片保存途径
    FileOutputStream fos = new FileOutputStream(new File(filename));
    //将 bitmap 压缩成其他格式的图片数据
    Bitmap thumbImg = Bitmap.createScaledBitmap(cachebBitmap, 160, 90, true); 
    thumbImg.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    

    相关文章

      网友评论

          本文标题:Android画布(签名区)

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