自定義View之貪吃蛇

2021-12-29 20:57:16 字數 910 閱讀 2925

本次的重點,如何讓自定義view動起來。

效果如下圖: 如圖所見,我們自定義3個view

乙個是單元tileview,用來畫方塊

乙個是貪吃蛇snakeview繼承至tileview

乙個是背景backgroundview

本次重點介紹snakeview因為只有小蛇是動的。

前面講過,讓view重新整理有兩種方式,乙個在ui執行緒中,乙個在非ui執行緒(一般使用su***ceview)。

簡單的,不是非常頻繁的重新整理可以在ui執行緒中。snakeview就是採用這種方式。

核心實現:

1.使用handler來重新整理view,使用handler中的 sendmessagedelayed的方式來控制小蛇的速度。delay越久,小蛇速度越慢。

class refreshhandler extends handler

public void sleep(long delaymillis)

};2.重寫ondraw方法中,構造小蛇身體組成的方塊即可。

@override

public void ondraw(canvas canvas) }}

}將這個螢幕轉化為乙個矩陣,矩陣的行數就是mxtilecount,列數就是mytilecount.對應的元素是方塊,是否需要畫方塊由mtilegrid二維陣列儲存的值決定的。

小蛇的行動其實就是對mtilegrid二維陣列中的值進行修改。每次更新view都會將這個二維陣列遍歷一次,重新構造view。因此效率很差。

mxtilecount:當前螢幕x方向最都能畫幾個方塊

mytilecount:當前螢幕y方向最都能畫幾個方塊

總結:直接**程ui中操作view重新整理

優點:實現簡單。

缺點:效率低,不流暢,view位置變化是很生硬,從這消失,到那出現。中間沒有動畫來連貫。

貪吃蛇之按鍵

貪吃蛇遊戲中我們需要通過按鍵來控制貪吃蛇的前進方向,在 中,我用到了kbhit 函式來實現這一功能。kbhit 函式是乙個用於非阻塞的響應鍵盤輸入事件的c語言函式,下面我們就來簡單介紹一下這個函式的功能和用法。直接來乙個 吧 函式名kbhit 函式原型 int kbhit void 標頭檔案coni...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...