山寨酷狗更換壁紙,表徵圖的顏色也跟著換,山寨酷狗

來源:互聯網
上載者:User

山寨酷狗更換壁紙,表徵圖的顏色也跟著換,山寨酷狗

上一篇寫了模仿QQ更換主題的思路跟實現,看到酷狗音樂更換壁紙,表徵圖的顏色也跟著換,這種也相當於更換了一套主題,挺有意思的,現在也山寨一下,寫寫它是怎樣實現的。


從圖片中可以看出來,表徵圖更換的顏色,是壁紙的主要顏色(試了一些壁紙,並不是這樣的,有些並不是圖片的主要顏色,不知是否是過濾掉一些顏色,給它個預設顏色值,也不像是使用Palette裡提取的顏色,這裡就講提取主顏色吧),那麼第一步,就是要擷取一張圖片的主要顏色,前面一篇部落格,android L Palette 的實現原理有講到,如何將一張圖片,把各種顏色分類,以長條圖的顯示,這裡,我們只需要從這個顏色長條圖裡面拿到其中最高的那一柱,我在ColorHistogram這個類裡加多了個方法,就是提取主顏色的,如果靠近黑色或白色的是最高的那一柱,就過濾掉,拿另外一柱比較高的(mColors儲存的是圖片的各種顏色,mColorCounts是儲存對應的這種顏色的數量或說有多高)

 int maxColorCount = 0;    public int getMainColor(){    for(int i=0;i<mColors.length;i++){    if(ColorUtils.shouldIgnoreColor(mColors[i])){                continue;            }    if(maxColorCount<mColorCounts[i]){    maxColorCount = mColorCounts[i];            maxColorIndex = i;            }    }return mColors[maxColorIndex];    }

拿到了這個顏色,再替換原來圖片的顏色,那就ok了

private static Drawable getDrawable(Context context,int drawableID,int beColor) {Bitmap bm = BitmapFactory.decodeResource(context.getResources(),drawableID);int w = bm.getWidth();int h = bm.getHeight();int px[] = new int[w * h];bm.getPixels(px, 0, w, 0, 0, w, h);for (int i = 0; i < px.length; i++) {int r = Color.red(px[i]);int g = Color.green(px[i]);int b = Color.blue(px[i]);int a = Color.alpha(px[i]);//Log.d("color rgba", "" + r + "," + g + "," + b + "," + a);if (r > 240 && g > 240 && b > 240) {//因為酷狗的那些需要替換的表徵圖顏色都是白色的,rgb都是255,也只需要換掉rgb對應的值,這裡使用原///來的透明度很重要,因為rgb是255,但它原來的a不一定是255,才使得圖片看起來好看r = Color.red(beColor);g = Color.green(beColor);b = Color.blue(beColor);px[i] = Color.argb(a, r, g, b);}}bm = Bitmap.createBitmap(px, 0, w, w, h, Bitmap.Config.ARGB_8888);return new BitmapDrawable(bm);}
這裡主要的就是這兩個方法了,看看效果


demo下載,有興趣的可以看看,酷狗音樂還有模糊背景的,裡面也提供了方法



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.