Android 使用Canvas在圖片上繪制文字的方法
【Android】Android中 Paint 字體、粗細(xì)等屬性的一些設(shè)置
在Android SDK中使用Typeface類來定義字體,可以通過常用字體類型名稱進(jìn)行設(shè)置,如設(shè)置默認(rèn)黑體:
Paint mp = new paint(); mp.setTypeface(Typeface.DEFAULT_BOLD)
常用的字體類型名稱還有:
* Typeface.DEFAULT //常規(guī)字體類型
* Typeface.DEFAULT_BOLD //黑體字體類型
* Typeface.MONOSPACE //等寬字體類型
* Typeface.SANS_SERIF //sans serif字體類型
* Typeface.SERIF //serif字體類型
除了字體類型設(shè)置之外,還可以為字體類型設(shè)置字體風(fēng)格,如設(shè)置粗體:
Paint mp = new Paint(); Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD); p.setTypeface( font );
常用的字體風(fēng)格名稱還有:
* Typeface.BOLD //粗體
* Typeface.BOLD_ITALIC //粗斜體
* Typeface.ITALIC //斜體
* Typeface.NORMAL //常規(guī)
但是有時(shí)上面那些設(shè)置在繪圖過程中是不起作用的,所以還有如下設(shè)置方式:
Paint mp = new Paint(); mp.setFakeBoldText(true); //true為粗體,false為非粗體 mp.setTextSkewX(-0.5f); //float類型參數(shù),負(fù)數(shù)表示右斜,整數(shù)左斜 mp.setUnderlineText(true); //true為下劃線,false為非下劃線 mp.setStrikeThruText(true); //true為刪除線,false為非刪除線
Paint常用的方法還有:
mp.setTextSize(); //設(shè)置字體大小,int型,如12 mp.setStrokeWidth(w); //設(shè)置線寬,float型,如2.5f,默認(rèn)繪文本無需設(shè)置(默認(rèn)值好像為0),但假如設(shè)置了,再繪制文本的時(shí)候一定要恢復(fù)到0
說明:對于中文粗體的設(shè)置,好像只能通過setFakeBoldText(true)來實(shí)現(xiàn),盡管效果看起來不是很實(shí)在(字體中空效果)。實(shí)際發(fā)現(xiàn),最后繪制的效果與手機(jī)硬件也有些關(guān)系,比如前面的繪圖測試程序.
一個(gè)小應(yīng)用,在圖片上繪制文字,以下是繪制文字的方法,并且能夠?qū)崿F(xiàn)自動換行,字體自動適配屏幕大小
private void drawNewBitmap(ImageView imageView, String str) { Bitmap photo = BitmapFactory.decodeResource(this.getResources(), R.drawable.background); int width = photo.getWidth(); int hight = photo.getHeight(); //建立一個(gè)空的Bitmap Bitmap icon = Bitmap.createBitmap(width, hight, Bitmap.Config.ARGB_8888); // 初始化畫布繪制的圖像到icon上 Canvas canvas = new Canvas(icon); // 建立畫筆 Paint photoPaint = new Paint(); // 獲取更清晰的圖像采樣,防抖動 photoPaint.setDither(true); // 過濾一下,抗劇齒 photoPaint.setFilterBitmap(true); Rect src = new Rect(0, 0, photo.getWidth(), photo.getHeight());// 創(chuàng)建一個(gè)指定的新矩形的坐標(biāo) Rect dst = new Rect(0, 0, width, hight);// 創(chuàng)建一個(gè)指定的新矩形的坐標(biāo) canvas.drawBitmap(photo, src, dst, photoPaint);// 將photo 縮放或則擴(kuò)大到dst使用的填充區(qū)photoPaint //自定義的畫筆 TextPaint textPaint=myTextPaint(); drawText(canvas,textPaint,str,45,hight/5,width); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); imageView.setImageBitmap(icon); saveMyBitmap(this,icon); }
//設(shè)置畫筆的字體和顏色 public TextPaint myTextPaint(){ TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);// 設(shè)置畫筆 int TEXT_SIZE = Math.round(25 * getRATIO()); textPaint.setTextSize(TEXT_SIZE);// 字體大小 textPaint.setTypeface(Typeface.DEFAULT_BOLD);// 采用默認(rèn)的寬度 textPaint.setColor(Color.argb(255,94,38,18));// 采用的顏色 return textPaint;
//寫入文字,自動換行的方法 public void drawText(Canvas canvas, TextPaint Paint,String textString,int x,int y,int width) { //int Width=Math.round(width* getRATIO()); int start_x=Math.round(x * getRATIO()); int start_y=Math.round(y * getRATIO()); StaticLayout staticLayout=new StaticLayout(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在圖片上繪制文字的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android中利用動態(tài)加載實(shí)現(xiàn)手機(jī)淘寶的節(jié)日特效
這篇文章主要介紹了Android中利用動態(tài)加載實(shí)現(xiàn)手機(jī)淘寶的節(jié)日特效,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12Android 使用mediaplayer播放res/raw文件夾中的音樂的實(shí)例
這篇文章主要介紹了Android 使用mediaplayer播放res/raw文件夾中的音樂的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04基于Flutter實(shí)現(xiàn)轉(zhuǎn)場動效的示例代碼
動畫經(jīng)常會用于場景切換,比如滑動,縮放,尺寸變化。Flutter?提供了Transition系列的動畫組件,可以讓場景轉(zhuǎn)換動畫變得更加簡單。本文整理了常用的Transition組件的應(yīng)用,需要的可以參考一下2022-05-05Android開發(fā)之?dāng)?shù)據(jù)的存儲方式詳解
本篇文章主要介紹了Android開發(fā)之?dāng)?shù)據(jù)的存儲方式,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。2016-11-11一文詳解Android IntentService的開發(fā)技巧
Android應(yīng)用開發(fā)中,執(zhí)行后臺任務(wù)是常見需求之一,其中,IntentService是一種強(qiáng)大的工具,可以輕松管理異步任務(wù),而無需擔(dān)心線程管理和生命周期問題,本文將深入探討 IntentService 的各個(gè)方面,需要的朋友可以參考下2023-11-11Android UI設(shè)計(jì)系列之自定義Dialog實(shí)現(xiàn)各種風(fēng)格的對話框效果(7)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義Dialog實(shí)現(xiàn)各種風(fēng)格的對話框效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android中解決EditText放到popupWindow中,原有復(fù)制、粘貼、全選、選擇功能失效問題
這篇文章主要介紹了Android中解決EditText放到popupWindow中,原有復(fù)制、粘貼、全選、選擇功能失效問題 的相關(guān)資料,需要的朋友可以參考下2016-04-04