作者liu2007 (薯)
看板AndroidDev
標題[問題]Android 繪製的機制疑問
時間Wed Mar 21 19:07:37 2012
最近在trace android.widget.Gallery 的source code
很想知道那滑順的移動圖案是怎麼做出來的
結果發現Gallery 裡的
FlingRunnable 裡的
Scroller是一個關鍵
可是點進去看Scroller的source code卻發現裡頭只有一堆數字在做運算
跟繪圖一點關係都沒有
不甘心又回去找Gallery所繼承的父類別方法
不是呼叫父類別的方法
要不然就是修改一些variable
或者是增減自己的array的東西而已
卻還是找不到View真正畫上繪畫的方法
找到後來
從子類別方法trace上來的父類別方法最後都鬼隱斷頭了
後來我問我同學
他說Android的繪圖有一個類似Listener的東西
專門監視螢幕上的物件的資料結構是否有所謂的變動
如果有
這個監視器就會觸發繪畫的方法真正去作繪畫
為得就是讓使用者只要focus在資料結構的maintain就好
另外他說android在繪畫的底層是用C去包的
所以從Java trace到最後還是會看不見什麼時候畫的
想請問各位高手們
我同學說的對嗎??
是否有錯誤或是疏漏的嗎??
--
If a child on the street who has nothing is willing to share,
why are we who have everything still so greedy?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.134.26.30
1F:→ lovelycateye:你要不要考慮說一下你真正想做的是啥啊? 03/21 22:51
2F:→ lovelycateye:一直invalid就跟做遊戲的原理一樣啊 03/21 22:52
3F:→ lovelycateye:真的要看怎麼畫就看onDraw吧 03/21 22:52
4F:推 facing:android的圖形系統是有點復雜,app->view->surface(client) 03/21 23:33
5F:→ facing:->surfaceflinger(server)->opengl->framebuffer,大體上這 03/21 23:35
6F:→ facing:樣一條線路,更上層的draw就不說了。surface有java和c 03/21 23:35
7F:→ facing:層,是C/S結構,我曾改過surfaceflinger的代碼,稍微研究過 03/21 23:37
8F:→ facing:一點。建議你先從架構了解android圖形系統,再從上到下,從 03/21 23:38
9F:→ facing:java到C層trace一下啊。 03/21 23:39
我想做的是一個轉動選單的介面
感覺是類似gallery
https://www.youtube.com/watch?v=3UsPer9c5bg
實際上是這樣
http://www.badongo.com/pic/15203046
我不打算用finger滑動
我只希望按上下可以像影片那樣很滑順地滑動一格一格
※ 編輯: liu2007 來自: 106.1.104.75 (03/22 00:35)
10F:推 blooker:不就是一個計算完delta以後代給trackMotionScroll 03/22 00:32
11F:→ blooker:trackMotionScroll會在call invalidate 03/22 00:33
12F:→ blooker:facing說的那些東西 除非你對invalidate之後的東西有興趣 03/22 00:33
13F:→ blooker:不然不知道也沒差 03/22 00:33
14F:推 lovelycateye:我的預期就跟樓上一樣,其實你要的跟你問的不一樣 03/22 08:27