Android View學習樣本

來源:互聯網
上載者:User

View,是Android的一個超類,這個類幾乎包含了所有的螢幕類型。每一個View都有一個用於繪圖的畫布,這個畫布可以進行任意擴充。

在遊戲開發中葉可以自訂視圖(View),這個畫布的功能更能滿足我們在遊戲開發中的需要。在Android中,任何一個View類都只需重寫onDraw 方法來實現介面顯示,自訂的視圖可以是複雜的3D實現,也可以是非常簡單的文本形式等。 

遊戲的核心是不斷地繪圖和重新整理介面,Android中提供了 invalidate 方法來實現介面重新整理。注意,invalidate 不能直接線上程中調用, 就是不可以在子線程中調用,因此它違背了 Android的單執行緒模式:Android UI操作並不是安全執行緒的,並且這些操作必須在UI 線程中執行,因此Android中最常用的方法就是利用Handler來實現UI線程的更新。 其實用 AsyncTask 也可以。

具體樣本:

Activity:

public class Activity01 extends Activity {</p><p>private static final String TAG = "mThread";<br />private static final int REFRESH = 0x000001;<br />private GameView mGameView = null;</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);</p><p>this.mGameView = new GameView(this);<br />mGameView.x = 320.0f;<br />mGameView.y = 120.0f;<br />setContentView(mGameView);</p><p>new Thread(new GameThread()).start();<br />}</p><p>Handler myHandler = new Handler() {</p><p>@Override<br />public void handleMessage(Message msg) {</p><p>switch (msg.what) {<br />case Activity01.REFRESH:<br />mGameView.invalidate();// repaint View<br />break;<br />}<br />super.handleMessage(msg);<br />}<br />};</p><p>class GameThread implements Runnable {</p><p>@Override<br />public void run() {<br />while (!Thread.currentThread().isInterrupted()) {<br />Message message = new Message();<br />message.what = Activity01.REFRESH;</p><p>Activity01.this.myHandler.sendMessage(message);<br />try {<br />Thread.sleep(1000);<br />} catch (InterruptedException e) {<br />Thread.currentThread().interrupt();<br />}<br />}<br />}<br />}</p><p>@Override<br />public boolean onTouchEvent(MotionEvent event) {<br />if(event.getAction() == MotionEvent.ACTION_DOWN){<br />mGameView.x = event.getX();<br />mGameView.y = event.getY();<br />}</p><p>return true;<br />}</p><p>@Override<br />public boolean onKeyDown(int keyCode, KeyEvent event) {<br />if(keyCode == KeyEvent.KEYCODE_BACK){<br />this.finish();<br />}</p><p>return true;<br />}<br />}
gameview

public class GameView extends View {<br />int count = 0;<br />float x = 0, y = 0;</p><p>public GameView(Context context) {<br />super(context);<br />}</p><p>public void onDraw(Canvas canvas) {<br />if (count < 100) {<br />count++;<br />} else {<br />count = 0;<br />}</p><p>Paint mPaint = new Paint();<br />switch (count % 4) {<br />case 0:<br />mPaint.setColor(Color.BLUE);<br />break;<br />case 1:<br />mPaint.setColor(Color.GREEN);<br />break;<br />case 2:<br />mPaint.setColor(Color.RED);<br />break;<br />case 3:<br />mPaint.setColor(Color.YELLOW);<br />break;<br />default:<br />mPaint.setColor(Color.WHITE);<br />break;<br />}</p><p>canvas.drawRect(x - 40, y - 20, x + 40, y + 20, mPaint);<br />}<br />}<br />
運行效果:

源碼下載 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.