Android鬼點子 自定義控制元件印上LOGO的解決思路

weixin_34357887發表於2017-12-15

    這次要說的還是思路或者是說分享一個自定義控制元件時的一個小竅門。

    最近遇到一個這樣的需求:在一個自定義的控制元件上加上我們App的logo。

aa.jpg

    遇到這個需求,我最先有的思路是把控制元件弄成Viewgroup,logo做成圖片,然後使用ImageView,Layout進來。 後來想想,這個方法我不想用,我分析的原因如下:

1.覺得效率不高(純猜測) 2.使用圖片的話,需要不同解析度適配啊,會增加APK的size 3.程式碼量也不少 4.如果以後需求變更,修改了LOGO的顏色啊,大小啊什麼,還要更換圖片

    然後,退而求其次,當一個畫家,一筆一筆的畫一個logo,但是最後看了logo的真身之後,我就慫了,logo太複雜,看到美工的設計稿,好多輔助線,好多細節,所以這個想法也放棄了。

    最後我的解決方法是把logo做成了字型寫在了自定義的View上,這樣可以控制大小和顏色,還不會失真,用到的字型檔案只有4k,如果不同的地方用到,也不會增加體積。

下面是具體步驟: 1.AI檔案轉SVG 轉出之前需要用AI中的(視窗選單裡面)路徑查詢器,合併路徑。

AI.png

然後匯出svg。

匯出

2.把svg轉成字型庫 我用到了 這個網站

1

2

3

上面圖的編碼要記住,後面會用到。

3.整合到專案中

把下載下來的字型放到專案中,我放到了這裡。

4

在string.xml中

<string name="SHOWlogo">&#xe900;</string>
複製程式碼

自定義View中

typeface_logo = Typeface.createFromAsset(context.getAssets(), "iconfont/icomoon.ttf");
logo_paint.setTypeface(typeface_logo);
canvas.drawText(mContext.getResources().getString(R.string.SHOWlogo), centre - logo_paint.measureText(mContext.getResources().getString(R.string.SHOWlogo)) / 2,
                centre * 1.48f - 0.62f * (logo_paint.ascent() + logo_paint.descent()), logo_paint);
複製程式碼

這樣logo就出現在自定義控制元件中了。

相關文章