美文网首页
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