生活随笔
收集整理的這篇文章主要介紹了
android 去锯齿
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引用:http://www.linuxidc.com/Linux/2011-11/48318.htm
// 設置Paint為無鋸齒
32 mPaint.setAntiAlias(true);
全文
癥狀:游戲過程中,按下Home鍵返回手機主菜單,再點擊游戲圖標試圖返回游戲的時候屏幕黑的一片!
?
以前一直沒在意只有結束線程在運行游戲,今天覺得改仔細琢磨一下這個問題了!
?
首先第一件事:打印Logo看看按下Home鍵后會調用哪些方法,結果如下:
游戲過程中按下Home后:
11-29 20:42:07.090: I/System.out(18835): Activity onPause...
11-29 20:42:14.190: I/System.out(18835): Activity ?onStop...
11-29 20:42:14.260: I/System.out(18835): SurfaceView surfaceDestroyed...
?
可見SurfaceView 在返回手機主菜單的時候被銷毀了,而我的SurfaceView 主線程是在構造方法里創建的
那么我們返回游戲的時候會調哪些方法呢?接著看Log:
11-29 20:48:06.940: I/System.out(18835): Activity ?onRestart...
11-29 20:48:06.950: I/System.out(18835): Activity ?onResume...
11-29 20:48:07.230: I/System.out(18835): SurfaceView ?surfaceCreated...
11-29 20:48:07.240: I/System.out(18835): SurfaceView ?surfaceChanged...
?
surfaceDestroyed 的時候線程已經退出了運行,這時再返回到游戲刷屏的線程就沒了,任何繪制方法都沒調用,所以你看到的只有黑漆漆的屏幕啦!
明白了運行原理我們就知道改怎么做啦!
?
首先創建線程放在?surfaceCreated ,并啟動線程,
當?surfaceDestroyed 調用的時候,線程已經無效了,我們把線程對象設為null釋放他,
然后不管怎么返回線程都會繼續運行你的游戲也就不會中斷了,來段簡單的代碼更具表達力度!
package?com.game.view;????import?Android.content.Context;??import?Android.graphics.Canvas;??import?Android.graphics.Paint;??import?Android.graphics.Paint.Style;??import?Android.graphics.Rect;??import?Android.view.SurfaceHolder;??import?Android.view.SurfaceHolder.Callback;??import?Android.view.SurfaceView;????public?class?TestView?extends?SurfaceView?implements?Callback,?Runnable{??????public?static?final?int?GAME_HEART?=?1000/30;???????????????public?static?int?screenW,?screenH;????????????private?Thread?thread;??????private?SurfaceHolder?holder;??????private?Paint?paint;????????????public?TestView(Context?context)?{??????????super(context);????????????????????holder?=?getHolder();??????????holder.addCallback(this);????????????????????paint?=?new?Paint(Paint.ANTI_ALIAS_FLAG);??????????paint.setStyle(Style.FILL);???????????paint.setTextSize(16);???????}????????????????private?void?update()?{????????????????}????????????????????private?Rect?rect?=?new?Rect();??????private?void?draw(){??????????Canvas?canvas?=?holder.lockCanvas();????????????????????String?text?=?"天使之翼的示例Demo";????????????????????paint.getTextBounds(text,?0,?text.length(),?rect);????????????????????paint.setColor(0xfff000f0);???????????canvas.drawText(text,???????????????????(screenW?-?rect.width())/2,???????????????????screenH/2?+?rect.height()/2,???????????????????paint);????????????????????holder.unlockCanvasAndPost(canvas);??????}????????????@Override??????public?void?surfaceCreated(SurfaceHolder?holder)?{????????????????????screenW?=?getWidth();??????????screenH?=?getHeight();????????????????????thread?=?new?Thread(this);??????????isRun?=?true;??????????thread.start();??????}????????@Override??????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,?int?height)?{??????????????????????????????screenW?=?getWidth();??????????screenH?=?getHeight();??????}????????@Override??????public?void?surfaceDestroyed(SurfaceHolder?holder)?{????????????????????isRun?=?false;??????????thread?=?null;??????}????????private?boolean?isRun;????????private?int?useTime;??????????@Override??????public?void?run()?{????????????????????long?start,?end;????????????????????while(isRun){??????????????start?=?System.currentTimeMillis();??????????????update();???????????????draw();???????????????end?=?System.currentTimeMillis();??????????????useTime?=?(int)?(end?-?start);????????????????????????????if(useTime?<?GAME_HEART){??????????????????????try?{??????????????????????Thread.sleep(GAME_HEART?-?useTime);??????????????????}?catch?(InterruptedException?e)?{????????????????????????????????????????????e.printStackTrace();??????????????????}??????????????}??????????}??????}??} ?
轉載于:https://www.cnblogs.com/sode/archive/2012/08/04/2622789.html
總結
以上是生活随笔為你收集整理的android 去锯齿的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。