Android 使用Canvas在图片上绘制文字的方法
【Android】Android中Paint字体、粗细等属性的一些设置
在AndroidSDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体:
Paintmp=newpaint(); mp.setTypeface(Typeface.DEFAULT_BOLD)
常用的字体类型名称还有:
*Typeface.DEFAULT//常规字体类型
*Typeface.DEFAULT_BOLD//黑体字体类型
*Typeface.MONOSPACE//等宽字体类型
*Typeface.SANS_SERIF//sansserif字体类型
*Typeface.SERIF//serif字体类型
除了字体类型设置之外,还可以为字体类型设置字体风格,如设置粗体:
Paintmp=newPaint(); Typefacefont=Typeface.create(Typeface.SANS_SERIF,Typeface.BOLD); p.setTypeface(font);
常用的字体风格名称还有:
*Typeface.BOLD//粗体
*Typeface.BOLD_ITALIC//粗斜体
*Typeface.ITALIC//斜体
*Typeface.NORMAL//常规
但是有时上面那些设置在绘图过程中是不起作用的,所以还有如下设置方式:
Paintmp=newPaint(); mp.setFakeBoldText(true);//true为粗体,false为非粗体 mp.setTextSkewX(-0.5f);//float类型参数,负数表示右斜,整数左斜 mp.setUnderlineText(true);//true为下划线,false为非下划线 mp.setStrikeThruText(true);//true为删除线,false为非删除线
Paint常用的方法还有:
mp.setTextSize();//设置字体大小,int型,如12 mp.setStrokeWidth(w);//设置线宽,float型,如2.5f,默认绘文本无需设置(默认值好像为0),但假如设置了,再绘制文本的时候一定要恢复到0
说明:对于中文粗体的设置,好像只能通过setFakeBoldText(true)来实现,尽管效果看起来不是很实在(字体中空效果)。实际发现,最后绘制的效果与手机硬件也有些关系,比如前面的绘图测试程序.
一个小应用,在图片上绘制文字,以下是绘制文字的方法,并且能够实现自动换行,字体自动适配屏幕大小
privatevoiddrawNewBitmap(ImageViewimageView,Stringstr){ Bitmapphoto=BitmapFactory.decodeResource(this.getResources(),R.drawable.background); intwidth=photo.getWidth(); inthight=photo.getHeight(); //建立一个空的Bitmap Bitmapicon=Bitmap.createBitmap(width,hight,Bitmap.Config.ARGB_8888); //初始化画布绘制的图像到icon上 Canvascanvas=newCanvas(icon); //建立画笔 PaintphotoPaint=newPaint(); //获取更清晰的图像采样,防抖动 photoPaint.setDither(true); //过滤一下,抗剧齿 photoPaint.setFilterBitmap(true); Rectsrc=newRect(0,0,photo.getWidth(),photo.getHeight());//创建一个指定的新矩形的坐标 Rectdst=newRect(0,0,width,hight);//创建一个指定的新矩形的坐标 canvas.drawBitmap(photo,src,dst,photoPaint);//将photo缩放或则扩大到dst使用的填充区photoPaint //自定义的画笔 TextPainttextPaint=myTextPaint(); drawText(canvas,textPaint,str,45,hight/5,width); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); imageView.setImageBitmap(icon); saveMyBitmap(this,icon); }
//设置画笔的字体和颜色 publicTextPaintmyTextPaint(){ TextPainttextPaint=newTextPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);//设置画笔 intTEXT_SIZE=Math.round(25*getRATIO()); textPaint.setTextSize(TEXT_SIZE);//字体大小 textPaint.setTypeface(Typeface.DEFAULT_BOLD);//采用默认的宽度 textPaint.setColor(Color.argb(255,94,38,18));//采用的颜色 returntextPaint;
//写入文字,自动换行的方法 publicvoiddrawText(Canvascanvas,TextPaintPaint,StringtextString,intx,inty,intwidth){ //intWidth=Math.round(width*getRATIO()); intstart_x=Math.round(x*getRATIO()); intstart_y=Math.round(y*getRATIO()); StaticLayoutstaticLayout=newStaticLayout(textString,Paint,width-start_x*2, Alignment.ALIGN_NORMAL,1.5f,0.0f,false); //绘制的位置 canvas.translate(start_x,start_y); staticLayout.draw(canvas); }
以上这篇Android使用Canvas在图片上绘制文字的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。