阅读更多

  这个实例主要是运用字体的只是,但是android自带就几种,虽然android有提供可以自己加载字体的功能,但我试了下,没发现成功的,所以我代码里面就没有弄了,就弄了自带的。明天再试试效果,发现书本的代码不怎么适合android,当字体变大时,会出现按两次才能换行的bug。已经修改了.

下面是效果图:


实例5--自动换行(修订版)_第1张图片


实例5--自动换行(修订版)_第2张图片

 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 intm_nWidth = 50;//显示宽度public Typeface m_nTypeFace = null;//存储字体public MainView(Context context) {super(context);// TODO Auto-generated constructor stubsetFocusable(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);}@Overridepublic void run() {// TODO Auto-generated method stubwhile(isGame){input();logic();doDraw();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();}}}//输入判断public void input(){if( keyCode == KeyEvent.KEYCODE_DPAD_UP && isKeyDown){m_nWidth = m_nWidth +(int)forePaint.getTextSize(); isKeyDown = false;}//如果按下方向键的下键,则调整当前行的位置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 );}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubstart();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stub//如果按下方向键的上键,则调整当前行的位置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);elsesubStr = strText.substring(0, nPos);canvas.drawText( subStr, x, y, paint);//截断句子,继续进行处理strText = strText.substring(nPos, strText.length());y = y + yDis;}}}}

 apk文件(将后缀改为apk):Demon_5.zip

源代码文件:Demon_5.rar

  • 实例5--自动换行(修订版)_第3张图片
  • 大小: 2.1 KB
  • 实例5--自动换行(修订版)_第4张图片
  • 大小: 2.1 KB
  • Demon_5.zip (15.2 KB)
  • 下载次数: 1
  • Demon_5.rar (45.7 KB)
  • 下载次数: 8
  • 查看图片附件

更多相关文章

  1. Android 常用图片框架对比
  2. Android超炫图片浏览器代码
  3. 转载--Android 开发 调用图库选择图片实现和参数详解
  4. 子墨庖丁Android的ActionBar源码分析 (一)实例化
  5. Android 录音与播放功能的简单实例
  6. android之AIDL实例详解
  7. android 增加物理按键关闭wifi实例讲解

随机推荐

  1. 1. 实例演示classList对象 2. 使用blur事
  2. 移动布局原理、实战手机页面的基本整体架
  3. 移动布局原理、实战手机页面的基本整体架
  4. Mac M1安装mnmp(Mac+Nginx+MySQL+PHP)开
  5. PHP引擎php.ini参数优化深入讲解
  6. python3编码问题汇总
  7. java使用Base64编码实例
  8. PHP如何限制定时任务的进程数量
  9. React类组件和函数组件
  10. 简单实例:图文列表、表格(课程表)