? 這個實例主要是運用字體的只是,但是android自帶就幾種,雖然android有提供可以自己加載字體的功能,但我試了下,沒發(fā)現(xiàn)成功的,所以我代碼里面就沒有弄了,就弄了自帶的。明天再試試效果,發(fā)現(xiàn)書本的代碼不怎么適合android,當字體變大時,會出現(xiàn)按兩次才能換行的bug。已經(jīng)修改了.
下面是效果圖:
?mainView的代碼:
package com.wjh.demon_5; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; public class MainView extends SurfaceView implements Callback,Runnable{ Thread gameThread = null; boolean isGame = true; SurfaceHolder holder = null; Paint forePaint = null; Paint backPaint = null; int keyCode = -1; boolean isKeyDown = false; public int m_nWidth = 50; //顯示寬度 public Typeface m_nTypeFace = null; //存儲字體 public MainView(Context context) { super(context); // TODO Auto-generated constructor stub setFocusable(true); getHolder().addCallback(this); holder = this.getHolder(); backPaint = new Paint(); backPaint.setColor(Color.BLACK); forePaint = new Paint(); forePaint.setTypeface(Typeface.DEFAULT_BOLD); forePaint.setTextSize(20); forePaint.setColor(Color.RED); } @Override public void run() { // TODO Auto-generated method stub while(isGame) { input(); logic(); doDraw(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //開始游戲主線程 public void start() { if(gameThread == null) { gameThread = new Thread(this); gameThread.start(); } } //停止游戲主線程 public void stop() { isGame = false; if(gameThread != null) { try { gameThread.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //輸入判斷 public void input() { if( keyCode == KeyEvent.KEYCODE_DPAD_UP && isKeyDown) { m_nWidth = m_nWidth +(int)forePaint.getTextSize(); isKeyDown = false; } //如果按下方向鍵的下鍵,則調(diào)整當前行的位置 else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN && isKeyDown) { m_nWidth = m_nWidth - (int)forePaint.getTextSize(); isKeyDown = false; } } //邏輯判斷 public void logic() { } public void doDraw() { Canvas c = null; try { c = holder.lockCanvas(); synchronized (holder) { paint(c); } }finally{ if(c != null) { holder.unlockCanvasAndPost(c); } } } //畫圖 public void paint(Canvas canvas) { //清貧 canvas.drawRect(0, 0, getWidth(), getHeight(),backPaint); TextAjust.AjustDrawString(canvas,forePaint, "我要自動換行我要自動換行我要自動換行我要自動換行", m_nWidth, 50, 50, 30 ); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub stop(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub //如果按下方向鍵的上鍵,則調(diào)整當前行的位置 this.keyCode = keyCode; isKeyDown = true; return true; } }?
?書上提供的換行功能源碼,我把畫圖的改成android的,其他的沒改,但代碼效果不好
下面給出代碼
TextAjust.java
?
package com.wjh.demon_5; import android.graphics.Canvas; import android.graphics.Paint; public class TextAjust { static public int ChangLine(String str, Paint paint, int linewd ) { int wd = 0; char ch; for (int i = 0; i < str.length(); i++) { ch = str.charAt(i); if (ch == '\n') return i + 1; wd += paint.getTextSize(); if (wd > linewd) return i; } return 0; } static public void AjustDrawString(Canvas canvas,Paint paint, String strText, int linewd, int x, int y, int yDis ) { String subStr; int nPos; //需要換行的位置 while (true) { //獲得句子的斷點位置 nPos = ChangLine(strText, paint, linewd ); if (nPos == 0) { //如果nPos為0,代表輸入的字符串為空 canvas.drawText( strText, x, y,paint); break; } else { //判斷是否最后一句 if (strText.charAt(nPos - 1) == '\n' ) subStr = strText.substring(0, nPos - 1); else subStr = strText.substring(0, nPos); canvas.drawText( subStr, x, y, paint); //截斷句子,繼續(xù)進行處理 strText = strText.substring(nPos, strText.length()); y = y + yDis; } } } }
?apk文件(將后綴改為apk): Demon_5.zip
源代碼文件: Demon_5.rar
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
