成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android游戲開發之三:View類用法詳解

移動開發 Android 游戲開發
在上一節View類與SurfaceView類中,講解了View類和SurfaceView類的區別。本節將詳解View類的用法,從View類開始著重的介紹Android圖形顯示基類的相關方法和注意點。

View類常用方法

自定義View的常用方法:

onFinishInflate() 當View中所有的子控件均被映射成xml后觸發

onMeasure(int, int) 確定所有子元素的大小

onLayout(boolean, int, int, int, int) 當View分配所有的子元素的大小和位置時觸發

onSizeChanged(int, int, int, int) 當view的大小發生變化時觸發

onDraw(Canvas) view渲染內容的細節

onKeyDown(int, KeyEvent) 有按鍵按下后觸發

onKeyUp(int, KeyEvent) 有按鍵按下后彈起時觸發

onTrackballEvent(MotionEvent) 軌跡球事件

onTouchEvent(MotionEvent) 觸屏事件

onFocusChanged(boolean, int, Rect) 當View獲取或失去焦點時觸發 

onWindowFocusChanged(boolean) 當窗口包含的view獲取或失去焦點時觸發

onAttachedToWindow() 當view被附著到一個窗口時觸發

onDetachedFromWindow() 當view離開附著的窗口時觸發,Android123提示該方法和  onAttachedToWindow() 是相反的。

onWindowVisibilityChanged(int) 當窗口中包含的可見的view發生變化時觸發

以上是View實現的一些基本接口的回調方法。

View類方法的重載

 一般我們需要處理畫布的顯示時,重寫onDraw(Canvas)用的的是最多的:

  1.      @Override   
  2.       protected void onDraw(Canvas canvas) {    
  3.        //這里我們直接使用canvas對象處理當前的畫布,比如說使用Paint來選擇要填充的顏色    
  4.  
  5.       Paint paintBackground = new Paint();    
  6. paintBackground.setColor(getResources().getColor(R.color.xxx));  //從Res中找到名為xxx的color顏色定義    
  7.       canvas.drawRect(00, getWidth(), getHeight(), paintBackground); //設置當前畫布的背景顏色為paintBackground中定義的顏色,以0,0作為為起點,以當前畫布的寬度和高度為重點即整塊畫布來填充。  具體的后面會講,在Canvas中我們可以實現畫路徑,圖形,區域,線。而Paint作為繪畫方式的對象可以設置顏色,大小,甚至字體的類型等等。    
  8.     }   

當然還有就是處理窗口還原狀態問題(一般用于橫豎屏切換),除了在Activity中可以調用外,開發游戲時我們盡量在View中使用如下代碼:

  1. @Override   
  2.    protected Parcelable onSaveInstanceState() {     
  3.       Parcelable p = super.onSaveInstanceState();    
  4.       Bundle bundle = new Bundle();    
  5.       bundle.putInt("x", pX);    
  6.       bundle.putInt("y", pY);    
  7.       bundle.putParcelable("android_state", p);    
  8.       return bundle;    
  9.    }    
  10.    @Override   
  11.    protected void onRestoreInstanceState(Parcelable state) {     
  12.       Bundle bundle = (Bundle) state;    
  13.       dosomething(bundle.getInt("x"), bundle.getInt("y")); //獲取剛才存儲的x和y信息    
  14. r.onRestoreInstanceState(bundle.getParcelable("android_state"));    
  15.       return;    
  16.    }   

在View中如果需要強制調用繪制方法onDraw,可以使用invalidate()方法,它有很多重載版本,同時在線程中的postInvailidate()方法在后面的教程中會講到。

責任編輯:閆佳明 來源: jizhuomi
相關推薦

2013-05-20 17:04:09

2013-05-20 17:33:44

Android游戲開發自定義View

2012-05-15 13:44:00

HTML5中國

2011-11-03 11:42:42

虛擬化vmwareVMware View

2010-07-27 14:58:02

Flex ArrayC

2013-05-20 17:21:34

2013-05-21 09:56:15

2013-05-21 11:20:37

Android游戲開發View手勢識別

2012-09-20 09:54:12

ASP.NETWebC

2013-05-20 17:51:47

Android游戲開發SurfaceView

2010-07-19 10:24:44

AndroidiPhone

2013-05-21 14:10:11

Android游戲開發SoundPool類同時多音效

2011-08-02 11:17:13

iOS開發 View

2012-09-17 09:32:16

JavaScriptJSHTML5

2011-08-15 11:37:20

iPhone開發Mask

2013-05-20 17:48:20

2013-05-21 15:28:31

2013-05-21 16:17:13

2010-07-13 09:02:19

Widget開發

2011-09-09 20:14:58

Android Wid
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷久久久久swag精品 | 黄色成人av | 天天干天天爱天天爽 | 中文字幕伊人 | 久久一二| 成人在线免费 | 一区二区三区视频在线观看 | 国产成人久久精品一区二区三区 | 国产亚洲人成a在线v网站 | 一级免费a | 亚洲一区毛片 | 伊人网国产 | 99热最新 | 欧美日韩视频在线第一区 | 日本天堂视频在线观看 | 国产一区视频在线 | 欧美成人手机在线 | 国产探花在线精品一区二区 | 成人精品一区二区三区中文字幕 | 午夜a区| 国产精品欧美一区二区三区不卡 | 亚洲精品自拍视频 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 欧美一区二区三区免费电影 | 亚洲欧美综合精品久久成人 | 婷婷毛片| 国产91在线视频 | 国产日韩一区二区三区 | 天堂一区二区三区 | 国产成人精品免费视频大全最热 | 在线视频国产一区 | 综合色播 | 久久国产成人午夜av影院武则天 | 欧美一区精品 | 九九热精品在线 | 中文亚洲视频 | 欧美国产一区二区 | 亚洲视频免费在线观看 | 国产特黄一级 | 久久日韩精品一区二区三区 | 亚洲一区二区三区高清 |