日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android攻城狮SurfaceView

發(fā)布時(shí)間:2024/4/17 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android攻城狮SurfaceView 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SurfaceView:

? ?它的特性是:可以在主線(xiàn)程之外的線(xiàn)程中向屏幕繪圖上。這樣可以避免畫(huà)圖任務(wù)繁重的時(shí)候造成主線(xiàn)程阻塞,從而提高了程序的反應(yīng)速度。在游戲開(kāi)發(fā)中多用到 ? ? SurfaceView,游戲中的背景、人物、動(dòng)畫(huà)等等盡量在畫(huà)布canvas中畫(huà)出。

2、實(shí)現(xiàn)

? ? 首先繼承SurfaceView并實(shí)現(xiàn)SurfaceHolder.Callback接口
使用接口的原因:因?yàn)槭褂肧urfaceView 有一個(gè)原則,所有的繪圖工作必須得在Surface 被創(chuàng)建之后才能開(kāi)始(Surface—表面,這個(gè)概念在?圖形編程中常常被提到。基本上我們可以把它當(dāng)作顯存的一個(gè)映射,寫(xiě)入到Surface 的內(nèi)容
??????????????????? ? 可以被直接復(fù)制到顯存從而顯示出來(lái),這使得顯示速度會(huì)非常快),而在Surface 被銷(xiāo)毀之前必須結(jié)束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了繪圖處理代碼的邊界。

需要重寫(xiě)的方法

 (1)public?void?surfaceChanged(SurfaceHolder?holder,int?format,int?width,int?height){}

 ????//在surface的大小發(fā)生改變時(shí)激發(fā)

 (2)public?void?surfaceCreated(SurfaceHolder?holder){}

 ????//在創(chuàng)建時(shí)激發(fā),一般在這里調(diào)用畫(huà)圖的線(xiàn)程。

 (3)public?void?surfaceDestroyed(SurfaceHolder?holder)?{}

 ????//銷(xiāo)毀時(shí)激發(fā),一般在這里將畫(huà)圖的線(xiàn)程停止、釋放。

整個(gè)過(guò)程:繼承SurfaceView并實(shí)現(xiàn)SurfaceHolder.Callback接口 ----> SurfaceView.getHolder()獲得SurfaceHolder對(duì)象 ---->SurfaceHolder.addCallback(callback)添加回調(diào)函數(shù)---->SurfaceHolder.lockCanvas()獲得Canvas對(duì)象并鎖定畫(huà)布----> Canvas繪畫(huà) ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)結(jié)束鎖定畫(huà)圖,并提交改變,將圖形顯示。


3、SurfaceHolder
這里用到了一個(gè)類(lèi)SurfaceHolder,可以把它當(dāng)成surface的控制器,用來(lái)操縱surface。處理它的Canvas上畫(huà)的效果和動(dòng)畫(huà),控制表面,大小,像素等。
幾個(gè)需要注意的方法:
(1)、abstract void addCallback(SurfaceHolder.Callback callback);
// 給SurfaceView當(dāng)前的持有者一個(gè)回調(diào)對(duì)象。
(2)、abstract Canvas lockCanvas();
// 鎖定畫(huà)布,一般在鎖定后就可以通過(guò)其返回的畫(huà)布對(duì)象Canvas,在其上面畫(huà)圖等操作了。
(3)、abstract Canvas lockCanvas(Rect dirty);
// 鎖定畫(huà)布的某個(gè)區(qū)域進(jìn)行畫(huà)圖等..因?yàn)楫?huà)完圖后,會(huì)調(diào)用下面的unlockCanvasAndPost來(lái)改變顯示內(nèi)容。
// 相對(duì)部分內(nèi)存要求比較高的游戲來(lái)說(shuō),可以不用重畫(huà)dirty外的其它區(qū)域的像素,可以提高速度。
(4)、abstract void unlockCanvasAndPost(Canvas canvas);
// 結(jié)束鎖定畫(huà)圖,并提交改變。

1 //AndroidSurfaceView繪制組合圖形1實(shí)現(xiàn)移動(dòng) 2 public class MainActivity extends ActionBarActivity { 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(new GameView(this)); 8 9 10 } 11 12 13 }

?

1 public class GameView extends SurfaceView implements Callback { 2 private Contanier contanier; 3 private Rect rect; 4 private Circle circle; 5 6 public GameView(Context context) { 7 super(context); 8 contanier = new Contanier(); 9 rect = new Rect(); 10 circle = new Circle(); 11 rect.addChildrenView(circle); 12 contanier.addChildrenView(rect); 13 getHolder().addCallback(this); 14 } 15 16 public void draw() { 17 Canvas canvas = getHolder().lockCanvas(); 18 canvas.drawColor(Color.WHITE); 19 contanier.draw(canvas); 20 21 getHolder().unlockCanvasAndPost(canvas); 22 23 } 24 25 private Timer timer = null; 26 private TimerTask task = null; 27 28 public void startTimer() { 29 timer = new Timer(); 30 task = new TimerTask() { 31 32 @Override 33 public void run() { 34 // TODO Auto-generated method stub 35 draw(); 36 } 37 }; 38 timer.schedule(task, 100, 100); 39 } 40 41 public void stopTimer() { 42 if (timer != null) { 43 timer.cancel(); 44 timer = null; 45 } 46 } 47 48 @Override 49 public void surfaceCreated(SurfaceHolder holder) { 50 // TODO Auto-generated method stub 51 startTimer(); 52 } 53 54 @Override 55 public void surfaceChanged(SurfaceHolder holder, int format, int width, 56 int height) { 57 // TODO Auto-generated method stub 58 59 } 60 61 @Override 62 public void surfaceDestroyed(SurfaceHolder holder) { 63 // TODO Auto-generated method stub 64 stopTimer(); 65 } 66 67 }

?

1 public class Contanier { 2 private List<Contanier> children = null; 3 private float x = 0, y = 0; 4 5 public Contanier() { 6 // TODO Auto-generated constructor stub 7 children = new ArrayList<Contanier>(); 8 } 9 10 public void draw(Canvas canvas) { 11 canvas.save(); 12 canvas.translate(getX(), getY()); 13 childrenView(canvas); 14 for (Contanier c : children) { 15 c.draw(canvas); 16 17 } 18 canvas.restore(); 19 } 20 21 public void childrenView(Canvas canvas) { 22 23 } 24 25 public void addChildrenView(Contanier child) { 26 children.add(child); 27 } 28 29 public void removeChildrenView(Contanier child) { 30 children.remove(child); 31 } 32 33 public float getX() { 34 return x; 35 } 36 37 public void setX(float x) { 38 this.x = x; 39 } 40 41 public float getY() { 42 return y; 43 } 44 45 public void setY(float y) { 46 this.y = y; 47 } 48 49 } 1 public class Rect extends Contanier { 2 private Paint paint = null; 3 4 public Rect() { 5 // TODO Auto-generated constructor stub 6 paint = new Paint(); 7 paint.setColor(Color.GREEN); 8 } 9 10 @Override 11 public void childrenView(Canvas canvas) { 12 // TODO Auto-generated method stub 13 super.childrenView(canvas); 14 canvas.drawRect(0, 0, 100, 100, paint); 15 this.setY(this.getY()+1); 16 } 17 } 1 public class Circle extends Contanier { 2 private Paint paint = null; 3 4 public Circle() { 5 // TODO Auto-generated constructor stub 6 paint = new Paint(); 7 paint.setColor(Color.BLUE); 8 9 } 10 11 @Override 12 public void childrenView(Canvas canvas) { 13 // TODO Auto-generated method stub 14 super.childrenView(canvas); 15 canvas.drawCircle(50, 50, 50, paint); 16 } 17 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/my334420/p/6899832.html

總結(jié)

以上是生活随笔為你收集整理的Android攻城狮SurfaceView的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人三级在线 | 蜜桃av色偷偷av老熟女 | 四虎网址在线观看 | 3d动漫精品啪啪一区二区竹菊 | 陪读偷伦初尝小说 | 67194在线免费观看 | 亚洲欧美日韩成人 | 久久久久久免费视频 | 国产人妻人伦精品1国产丝袜 | 成人夜视频 | 久久国产传媒 | 国产伦精品一区二区三区视频免费 | 性调教学院高h学校 | 久久精品国产99精品国产亚洲性色 | 日韩区一区二 | 亚洲天堂av女优 | 免费看欧美一级片 | 成人香蕉视频在线观看 | 国产精品视频免费播放 | 欧美12--15处交性娇小 | 国产一区二区91 | 欧美群交射精内射颜射潮喷 | 免费久久 | 大肉大捧一进一出视频 | 特大黑人巨交吊性xx | 中文字幕免费在线看线人动作大片 | 久久99国产精品久久99果冻传媒 | 丝袜调教91porn | av手机版 | 日韩视频免费观看高清完整版 | 毛片在线免费观看网站 | 久久99久久久久 | 69av在线播放| 久久久久久欧美 | 中文字幕 视频一区 | 在线观看亚洲成人 | 天堂在线视频免费 | 欧美日韩v | 亚洲性综合 | 色视频免费 | 老司机成人网 | 不卡影院一区二区 | www.爱操| 国产精品成人久久电影 | av老司机在线播放 | 一级免费观看视频 | 天天操天天干天天爽 | 在线播放a | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 影音先锋在线视频观看 | 青草视屏 | 91成人在线 | 亚洲精品国产精品国自产 | 狠狠网站 | 91av视频在线观看 | 麻豆蜜桃91| 色妹子综合 | 欧美 日韩 国产 亚洲 色 | 男女免费网站 | 熟女av一区二区三区 | 在线观看日本 | 欧美成人短视频 | 老司机在线精品视频 | 中文字幕在线资源 | 国产精品国产三级国产普通话对白 | 中文字幕一区二区三 | 中文字幕 视频一区 | 国产精品色在线 | 国产一区网站 | 亚洲产国偷v产偷v自拍涩爱 | 欧美激情二区三区 | 精品国产乱码久久久久久闺蜜 | 日韩av一级片 | 亚洲精品大全 | 国产午夜精品视频 | 亚洲七区 | 亚洲综合图色40p | 人妻天天爽夜夜爽一区二区三区 | 久久久人人人 | 日韩欧美视频免费在线观看 | 国产精品一区二区三区在线看 | 亚洲aa视频 | 精品在线视频一区二区三区 | 久久久久麻豆v国产精华液好用吗 | 色综合网址 | 亚洲欧美色图片 | 欧美激情免费视频 | 色站在线| www.伊人网| 夜夜嗨网站 | 美女久久久久久 | 96毛片 | 欧美黑人欧美精品刺激 | 超碰精品在线观看 | 日韩性生交大片免费看 | 黑人操亚洲美女 | 一本色道久久88综合日韩精品 | 国产在线免费 | 五个女闺蜜把我玩到尿失禁 |