Android編程之View簡單學習樣本_Android

來源:互聯網
上載者:User

本文執行個體講述了Android編程之View簡單學習樣本。分享給大家供大家參考,具體如下:

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

gameview:

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

運行效果:

完整執行個體代碼代碼點擊此處本站下載。

希望本文所述對大家Android程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.