Android鬼点子 自定义控件印上LOGO的解决思路

616 阅读2分钟

    这次要说的还是思路或者是说分享一个自定义控件时的一个小窍门。

    最近遇到一个这样的需求:在一个自定义的控件上加上我们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就出现在自定义控件中了。