編輯:關於Android編程
問題描述:
調用View.invalidate()方法,就會請求View重新draw()。可是我看了invalidate()與相關的方法,並沒有與draw()有直接的關系。請問invalidate()是如何使View重新draw()的?
Drawable.mutate()方法為了不產生新的對象,直接返回了它自身。既然是這樣,那為什麼mutate()以後同一個圖像資源能夠有不同的常態(比如透明度)?在BitmapDrawable中在第一次mutate()的時候新生成一個BitmapState常態,後面的就是直接返回它自身了。第一次常態對象改變了倒還可以理解,可後面的我就不明白了。求高人解惑,非常感謝!
解決方案:
1:invalidate刷新原理比較復雜
invaliddate=>父view=>Handler=>performTraversals()=>draw()=>onDraw();
[java]
/* ============================detail====================================
其繼承的父views cheduleTraversals()方法向Handler發送消息
viewRoot 處理其消息
case DO_TRAVERSAL:
performTraversals();
performTraversals()方法,調用private void draw(boolean fullRedrawNeeded)
其中含有
mView.draw(canvas);
接著
if (!dirtyOpaque) onDraw(canvas);
*/
/* ============================detail====================================
其繼承的父views cheduleTraversals()方法向Handler發送消息
viewRoot 處理其消息
case DO_TRAVERSAL:
performTraversals();
performTraversals()方法,調用private void draw(boolean fullRedrawNeeded)
其中含有
mView.draw(canvas);
接著
if (!dirtyOpaque) onDraw(canvas);
*/
2:不是為了省內存,恰恰相反,原生的drawable是共享部份數據才是省內存
其中共享部分就是constant state(常態)
你想啊,N張圖片用一個常態,我若想改這個值,如Alpha那麼所有圖片都變了,就像
變量static變量一樣了
而使用mutate以後,會復制constant state,drawable還是共享的,這也算是解決了低於1.5版本的一個"bug"
本文實例分析了Android中Socket的應用。分享給大家供大家參考,具體如下:Android 提供的常用的網絡編程包括針對TCP/IP協議的Socket通信。Sock
以前在線性代數中學習了矩陣,對矩陣的基本運算有一些了解,前段時間在使用GDI+的時候再次學習如何使用矩陣來變化圖像,看了之後在這裡總結說明。首先大家看看下面這個3 x 3
四、Activity 4.1 Activity Activity是應用程序的入口。負責創建才窗口(setContextView(View)),和用戶交互等。 4.1.
首先需要做的是實現幾個頁面的跳轉,既類似微信的點擊按鈕,切換頁面。 話不多說,這是一個簡單的頁面切換的Demo,先貼幾張實現的效果: 圖片的底部是5個RadioButt