編輯:關於Android編程
時間過得很快,明天終於可以拿到房子了,交完這次房租,也可以成為房東了,看看博客也好久沒有更新了,最近一直在整機器人,也沒有太多時間整理博客。
今天下午和同事一起遇到了一個問題,就是明明沒有改變一個控件的alpha值,但是這個控件的透明度居然變了。甚是奇怪之余,大神在stackoverflow上去提了問題,最後也有另外的大神給了正確的回復。
最終我們知道了是android的Drawable mutations的一些小細節問題
其實是android為了節省內存,把資源給共享了,如果兩個控件的drawable使用了相同的資源,可能是相同的圖片資源,可能是相同的顏色,或者其他。
可能還是不是非常理解,那我們就來個例子吧,首先我們新建個activity的layout文件,如下:
這裡省略了,只顯示需要的控件,其中test1和test2的background是一樣的,然後seeker是之後為了改變透明度使用。那就開始寫測試的代碼吧:
Button test1 = (Button)findViewById(R.id.test1);
Button test2 = (Button)findViewById(R.id.test2);
SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar_1);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
test1.getBackground().setAlpha(255-progress);
test2.invalidate();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
這裡通過拖動seekbar,然後改變button1的alpha值,這裡沒有設置button2的alpha,只是button2刷新了下。可以看下效果:
顯然我們沒有設置button2的background,那為什麼button2的背景透明度也變換了呢?其實就是如上所說的資源共享了,兩個button,我們都用了同一個的顏色,所以系統把公用了同一個顏色的資源,那麼當我們改變button1的顏色的時候,button2的alpha值也會跟著改變。
但是很多時候我們確實需要只改變一個控件的狀態而不是改變兩個,那要怎麼處理呢?這就是這裡要講的mutations了,mutation意為變化,突變的意思,這裡如果使用mutation的話,那麼就會只改變一個顏色了,那麼我們修改i下代碼:
test1.getBackground().mutate().setAlpha(255-progress);
修改設置alpha的方法,使用mutate()方法,然後運行看下效果:
如上圖,我們得到了很好的實踐。
debuggerd 簡介 Android系統自帶一個實用的程序異常退出的診斷daemon debuggerd。此進程可以偵測到程序崩潰,並將崩潰時的進程狀態信息輸出到文件
Android UI組件進階(2)——仿Windows對話框 在開始本章前先祝大家中秋節快樂哈,相信很多上班的朋友都是放三天假的哈! 有時間的話回家陪陪父母吧!樹欲靜
本文實例講述了Android仿zaker用手向上推動的特效開發。分享給大家供大家參考,具體如下:最近在商店下載了zaker ,閒暇時拿來看看新聞!發現每次打開軟件進入主界
1.利用SimpleAdapter適配器實現。 這裡以每一個網格中添加一張圖片和相應的文字說明為例: main.xml 因為除了添加圖片