美文网首页
android 自定义画板功能

android 自定义画板功能

作者: android老中医 | 来源:发表于2017-10-09 15:18 被阅读0次

1、最近公司项目有个需求是要做草稿纸功能,花了点时间完成了这个功能,顺便自己记录一下

2、大体思路是用画笔对按下和移动的路径进行描边,然后画出,抬起之后保存这个路径和画笔,以供后期要删除使用

3、下面上代码

//初始化画笔
    private void init(Context context) {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
        //画笔是空心的
        mPaint.setStyle(Paint.Style.STROKE);
        //画笔的笔尖 这里是圆形
        mPaint.setStrokeCap(Paint.Cap.ROUND);
//        Join.MITER(结合处为锐角)
//        Join.Round(结合处为圆弧)
//        Join.BEVEL(结合处为直线)
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        //处理图片
        mPaint.setFilterBitmap(true);
        //设置画笔的宽度
        mPaint.setStrokeWidth(5);
        //设置画笔颜色
        mPaint.setColor(Color.BLACK);


    }
    
    
    ...
        //取消撤回功能
    public void redo() {
        int size = mRemoveList == null ? 0 : mRemoveList.size();
        if (size > 0) {
            DrawInfo info = mRemoveList.remove(size - 1);
            mDrawList.add(info);
            reDraw();
        }
    }
    
        //撤回
    public void undo() {
        int size = mDrawList == null ? 0 : mDrawList.size();
        if (size > 0) {
            DrawInfo info = mDrawList.remove(size - 1);
            mRemoveList.add(info);
            reDraw();
        }
    }
    
        //清除
    public void clear() {
        if (mDrawList != null && mRemoveList != null) {
            mRemoveList.clear();
            mDrawList.clear();
            if (mBufferBitmap != null) {
                mBufferBitmap.eraseColor(Color.TRANSPARENT);
                invalidate();
            }
        }
    }
    
    //重新绘制
    private void reDraw() {
        if (mDrawList != null) {
            //把原来绘制在bitmap上的痕迹全部设置为透明,类似擦除
            mBufferBitmap.eraseColor(Color.TRANSPARENT);
            for (DrawInfo drawInfo : mDrawList) {
                //对mDrawList集合中的元素重新画上去
                drawInfo.draw(mBufferCanvas);
            }
            invalidate();
        }
    }
        @Override
    public boolean onTouchEvent(MotionEvent event) {
//        PointF midPoint = getMidPointOfFinger(event);
        int action = event.getAction() & MotionEvent.ACTION_MASK;
        float x = event.getX();
        float y = event.getY();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                mCanDrag = false;
                DownX = x;
                DownY = y;
                if (mPath == null) {
                    mPath = new Path();
                }
                mPath.moveTo(x, y);
                break;
            case MotionEvent.ACTION_MOVE:

//                if (mCanDrag) {
//                    x = event.getX();
//                    y = event.getY();
//                    float dx = x - DownX;
//                    float dy = y - DownY;
//                    mBufferMatrix.preTranslate((float) (dx * 0.05), (float) (dy * 0.05));
//                    invalidate();
//                    return true;
//                }
                mPath.quadTo(DownX, DownY, (x + DownX) / 2, (y + DownY) / 2);
                if (mBufferBitmap == null) {
                    initBuffer();
                }
                mBufferCanvas.drawPath(mPath, mPaint);
                invalidate();
                DownX = x;
                DownY = y;
                break;
            case MotionEvent.ACTION_UP:

                DownX = x;
                DownY = y;
                saveDraw();
                mPath.reset();
                break;
//            case MotionEvent.ACTION_POINTER_DOWN:
            
        return true;
    }
        //清除
    public void clear() {
        if (mDrawList != null && mRemoveList != null) {
            mRemoveList.clear();
            mDrawList.clear();
            if (mBufferBitmap != null) {
                mBufferBitmap.eraseColor(Color.TRANSPARENT);
                invalidate();
            }
        }
    }
    

核心代码就这些了 画板功能还是比较简单的

相关文章

  • android 自定义画板功能

    1、最近公司项目有个需求是要做草稿纸功能,花了点时间完成了这个功能,顺便自己记录一下 2、大体思路是用画笔对按下和...

  • android实现画板功能

    这两天闲来无事做了一个简易的画板程序,和大家分享一下。效果图: 这是一个灰常简单的画板,不过麻雀虽小,五脏俱全: ...

  • 如何编辑网格

    学习如何在概念画板中设定和自定义网格。 为了能为你的视觉设计工作提供帮助,概念画板5.8加入了自定义网格功能。你可...

  • android各种优秀开源框架和特效(二)

    Android完整案例及优秀插件、框架集合 DrawableView- DrawableView实现画板功能,可以...

  • android各种效果库

    可能是最优雅的切换布局的方法 动态切换布局控件android 实现画板功能 本例详细分析了一个画板功能的实现过程,...

  • Android_开发_Day30_画板Demo

    Android_开发Day30画板Demo 目的: 做一个画板来训练前面所学过的知识,如何自定义控件 技术: <1...

  • ios开发实现画板功能

    ios开发实现画板功能 ios开发实现画板功能

  • Android自定义相机

    CustomCamera android自定义相机 功能描述: 主要可自定义相机的各类按钮布局 相机拍照缩放功能 ...

  • Android自定义画板(一)

    Android画板千千万,网上一搜一大堆,但总是找不到一个满意的,今天我们就来自己做一个画板,包括以下功能: 绘制...

  • Android RecyclerView 拖曳item复制到其他

    简述 在Android 开发中,可能有些小伙伴会遇到类似这种功能:1.在画板上添加一些贴图,从图片列表中拖曳到画板...

网友评论

      本文标题:android 自定义画板功能

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