国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android編程之View簡(jiǎn)單學(xué)習(xí)示例

2020-04-11 11:20:18
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android編程之View簡(jiǎn)單學(xué)習(xí)示例。分享給大家供大家參考,具體如下:

View,是Android的一個(gè)超類,這個(gè)類幾乎包含了所有的屏幕類型。每一個(gè)View都有一個(gè)用于繪圖的畫布,這個(gè)畫布可以進(jìn)行任意擴(kuò)展。

在游戲開發(fā)中葉可以自定義視圖(View),這個(gè)畫布的功能更能滿足我們?cè)谟螒蜷_發(fā)中的需要。在Android中,任何一個(gè)View類都只需重寫onDraw 方法來實(shí)現(xiàn)界面顯示,自定義的視圖可以是復(fù)雜的3D實(shí)現(xiàn),也可以是非常簡(jiǎn)單的文本形式等。

游戲的核心是不斷地繪圖和刷新界面,Android中提供了 invalidate 方法來實(shí)現(xiàn)界面刷新。注意,invalidate 不能直接在線程中調(diào)用, 就是不可以在子線程中調(diào)用,因此它違背了 Android的單線程模型:Android UI操作并不是線程安全的,并且這些操作必須在UI 線程中執(zhí)行,因此Android中最常用的方法就是利用Handler來實(shí)現(xiàn)UI線程的更新。 其實(shí)用 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);   } }

運(yùn)行效果:

完整實(shí)例代碼代碼點(diǎn)擊此處本站下載

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平乡县| 永福县| 灵寿县| 德江县| 海丰县| 隆昌县| 庆城县| 清丰县| 南华县| 凤翔县| 德钦县| 凤冈县| 高青县| 赤水市| 定远县| 大洼县| 博乐市| 尚义县| 日喀则市| 吉木乃县| 怀远县| 分宜县| 张家川| 元谋县| 洪雅县| 安新县| 五原县| 东丰县| 疏附县| 焦作市| 高唐县| 句容市| 洛扎县| 清远市| 张掖市| 新竹市| 石棉县| 张家界市| 玉溪市| 苍梧县| 旬邑县|