亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

實例5--自動換行(修訂版)

系統(tǒng) 2447 0

? 這個實例主要是運用字體的只是,但是android自帶就幾種,雖然android有提供可以自己加載字體的功能,但我試了下,沒發(fā)現(xiàn)成功的,所以我代碼里面就沒有弄了,就弄了自帶的。明天再試試效果,發(fā)現(xiàn)書本的代碼不怎么適合android,當字體變大時,會出現(xiàn)按兩次才能換行的bug。已經(jīng)修改了.

下面是效果圖:


實例5--自動換行(修訂版)


實例5--自動換行(修訂版)

?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

實例5--自動換行(修訂版)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美中文 | 国产欧美精品专区一区二区 | 久久一区二区免费播放 | 国产成人18黄网站麻豆 | 爱爱爱免费视频 | 破外女出血一级毛片 | 97se亚洲综合在线 | 四虎视频国产精品免费入口 | 福利不卡 | 日本人wwwxxⅹ免费视频 | 久久剧场 | 亚洲毛片在线观看 | 99精品免费视频 | 99视频在线 | 九九热这里只有精品6 | 国产欧美日韩精品a在线观看 | 国产成人乱码一区二区三区在线 | 青青青免费在线视频 | 亚洲精品无人区一区二区三区 | 国产a免费 | 国产视频综合 | 亚洲精品欧美精品日韩精品 | 日韩视频网 | 国产高清久久99 | 精品国产夜色在线 | 日日添天天做天天爱 | 妖精视频永久在线入口 | 草草国产成人免费视频 | 日韩久久久精品首页 | 精品一区二区久久久久久久网站 | 香蕉福利久久福利久久香蕉 | www.婷婷| 久久久久久综合对白国产 | 四虎永久免费884hutv | 手机看片日韩日韩国产在线看 | 亚洲精品国产一区二区 | 日本久久一区二区 | 2018天天操天天干 | 中文字幕免费在线 | 国产精品国产福利国产秒拍 | 亚洲免费高清视频 |