这次要说的还是思路或者是说分享一个自定义控件时的一个小窍门。
最近遇到一个这样的需求:在一个自定义的控件上加上我们 App 的 logo。
遇到这个需求,我最先有的思路是把控件弄成 Viewgroup,logo 做成图片,然后使用 ImageView,Layout 进来。 后来想想,这个方法我不想用,我分析的原因如下:
1. 觉得效率不高(纯猜测) 2. 使用图片的话,需要不同分辨率适配啊,会增加 APK 的 size 3. 代码量也不少 4. 如果以后需求变更,修改了 LOGO 的颜色啊,大小啊什么,还要更换图片
然后,退而求其次,当一个画家,一笔一笔的画一个 logo,但是最后看了 logo 的真身之后,我就怂了,logo 太复杂,看到美工的设计稿,好多辅助线,好多细节,所以这个想法也放弃了。
最后我的解决方法是把 logo 做成了字体写在了自定义的 View 上,这样可以控制大小和颜色,还不会失真,用到的字体文件只有 4k, 如果不同的地方用到,也不会增加体积。
下面是具体步骤: 1.AI 文件转 SVG 转出之前需要用 AI 中的(窗口菜单里面)路径查找器,合并路径。
然后导出 svg。
2. 把 svg 转成字体库 我用到了 这个网站 。
上面图的编码要记住,后面会用到。
3. 集成到项目中
把下载下来的字体放到项目中,我放到了这里。
在 string.xml 中
- name="SHOWlogo">
自定义 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 就出现在自定义控件中了。
来源: https://juejin.im/post/5a3315345188251b950eb75e