Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發學習之路--Drawable mutations

Android開發學習之路--Drawable mutations

編輯:關於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()方法,然後運行看下效果:

如上圖,我們得到了很好的實踐。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved