既然我们实现了画布和画笔,也实现了手写,为了提高可用性,我们增加了对画笔风格的设置功能,这样就可以根据自己的需要选择画笔的颜色、粗细、风格(铅笔、浮雕、水彩等)效果。今天我们就介绍画笔风格的设置功能的实现过程,先看看效果图:
一、实现原理:
3、由于今天要创建的文件比较多,我们来先看一下项目的目录结构图:
二、实现过程:
在mudpdfactivity中先初始化控件:
我们是在长按事件中弹出对话框:
@OverridepublicbooleanonLongClick(Viewv){//TODOAuto-generatedmethodstubupdateLineShow();if(penSetPop==null){penSetPop=newPopupWindow(penSetView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);penSetPop.setBackgroundDrawable(getResources().getDrawable(R.drawable.popover_background_left));penSetPop.setFocusable(true);penSetPop.setOutsideTouchable(true);penSetPop.showAsDropDown(mAddPicButton,0,0);initColorViews();}else{penSetPop.setFocusable(true);penSetPop.setOutsideTouchable(true);penSetPop.showAsDropDown(mAddPicButton,0,0);penSetPop.update();}returntrue;//返回false时,点击事件还会响应;返回true,长按事件后点击事件就不响应了}
画笔的样式我们共做了四种样式,分别是铅笔、毛笔、签字笔、水彩笔,样式设置主要是通过类BlurMaskFilter和EmbossMaskFilte,通过改变他们的属性变量值来改变画笔书写效果,比如投影值、透明度等,将类BlurMaskFilter和EmbossMaskFilte的实例对象设置好后通过类Paint的方法:setMaskFilter()来传给画笔paint
/***功能:设置画笔风格*@parammPaintType*@return*/privateMaskFiltergetMaskFilter(intmPaintType){MaskFiltermaskFilter=null;switch(mPaintType){casePEN_TYPE.PLAIN_PEN://签字笔风格maskFilter=null;break;casePEN_TYPE.BLUR://铅笔模糊风格maskFilter=newBlurMaskFilter(8,BlurMaskFilter.Blur.NORMAL);break;casePEN_TYPE.EMBOSS://毛笔浮雕风格maskFilter=newEmbossMaskFilter(newfloat[]{1,1,1},0.4f,6,3.5f);break;casePEN_TYPE.TS_PEN://透明水彩风格maskFilter=null;mPenPaint.setAlpha(50);break;default:maskFilter=null;break;}mPenPaint.setMaskFilter(maskFilter);returnmaskFilter;}
在对话框中我们四个画笔选项:
/***功能:操作设置画笔风格*@paramview*/privatevoidinitpenRadioGroupf(Viewview){plainpen=(RadioButton)view.findViewById(R.id.buttonPlainPen);plainpen.setChecked(true);penRadioGroupf.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){if(checkedId==-1){return;}switch(checkedId){caseR.id.buttonBlurPen:setToolTyle(PEN_TYPE.BLUR);break;caseR.id.buttonEmboss:setToolTyle(PEN_TYPE.EMBOSS);break;caseR.id.buttonPlainPen:setToolTyle(PEN_TYPE.PLAIN_PEN);break;caseR.id.buttonSelectBackGroundColor:setToolTyle(PEN_TYPE.TS_PEN);break;default:break;}updateLineShow();}});}/***功能:设置画笔的样式**/privatevoidsetToolTyle(inttype){//mPaintView.setCurrentPainterType(type);mPenType=type;}
同时我们设置了十种颜色的选项,通过RadioGroup控件来动态添加选项,每一组五种,分成两组:
进度条来设置画笔的粗细:
@OverridepublicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){//TODOAuto-generatedmethodstubpenSize=progress;updateLineShow();}
这样设置对话框基本就完成了,我们设置好,要将相应的数值传递给画笔,我们是通过三个全局变量来保存画笔的颜色、粗细、风格的。
paint.setColor(MuPDFActivity.penColor);//设置画笔的颜色paint.setStrokeWidth(MuPDFActivity.penSize);//设置画笔的粗细getMaskFilter(MuPDFActivity.mPenType);