Android 巧妙编码引导提示UI

作者: SwitchLife | 来源:发表于2018-07-27 11:10 被阅读8次

开篇

  本篇说说如何编写引导提示UI视图。下面通过一个示例来做详细讲解。

要达到的效果


图标: ico_waiting_tip_bg.png
icon_machine_open_eye.png

以下是三种实施方案:

方案一

  整体切图,作为一个图片来使用,最简单不过了。

缺点:不同的提示文字需要重新切图,增加了APK包体积。

方案二

xml布局。这种方式也很简单。

优点:可以动态适配不同的提示文字,解决了方案一中的缺点。
缺点:提示文字很难居中在白色框内,增加layout布局的层次,消耗了一定的UI性能。当然,我们也可以叫UED把白色的倒三角单独切图,这也不失为一种方法。

方案三

Canvas画图,生成Bitmap。实现code:

   private Bitmap drawWaitingPicture() {
        int space = getResources().getDimensionPixelSize(R.dimen.space_8);
        String tips = "小影正在为您切换识别镜头,请稍等";
        Bitmap tipBg = BitmapFactory.decodeResource(getResources(), R.drawable.ico_waiting_tip_bg);
        Bitmap pig = BitmapFactory.decodeResource(getResources(), R.drawable.icon_machine_open_eye);
        //根据计算,创建特定大小的画布
        Bitmap bitmap = Bitmap.createBitmap(tipBg.getWidth(), tipBg.getHeight() + space + pig.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        //画提示文字的背景图片
        canvas.drawBitmap(tipBg, 0, 0, null);
        //画提示文字
        TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
        float textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, getResources().getDisplayMetrics());
        paint.setTextSize(textSize);
        paint.setColor(0xFF444444);
        Rect rect = new Rect();
        paint.getTextBounds(tips, 0, tips.length(), rect);
        Paint.FontMetrics fontMetrics = paint.getFontMetrics();
        float startX = (tipBg.getWidth() - rect.width()) / 2.0f;
        //这里的.75f是我们根据设计图自己计算出倒三角形上面部分占提示文字背景的比例。然后计算出文字的高度,做到文字居中的效果。
        float basicY = tipBg.getHeight() * .75f / 2;
        float baseLine = basicY - rect.height() / 2.0f + (rect.height() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
        canvas.drawText(tips, startX, baseLine, paint);
        //画下面的小猪🐖
        float translateX = (tipBg.getWidth() - pig.getWidth()) / 2.0f;
        float translateY = tipBg.getHeight() + space;
        canvas.translate(translateX, translateY);
        canvas.drawBitmap(pig, 0, 0, null);
        canvas.translate(-translateX, -translateY);
        //释放资源图片
        tipBg.recycle();
        tipBg = null;
        pig.recycle();
        pig = null;
        return bitmap;
    }

文字竖直居中的计算:
basicY——画布中文字区域的竖直方向中心线。
baseLine——文字的baseLine

float baseLine = basicY - rect.height() / 2.0f + (rect.height() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;

缺点:code稍微多点。
优点:我们消耗很小的cpu计算来解决了方案一、二中存在的问题。

不要脸的说明

  这只是通过一个简单的示例告诉我们一种解决问题的方案。你得知道你学到了什么。

篇尾

  之前的博文里面都附有本人的QQ联系方式,但很少使用QQ,在以后的博文里只提供本人的微信联系方式。微信eoy9527

人的活动如果没有理想的鼓舞,就会变得空虚而渺小。 —— 车尔尼雪夫斯基

相关文章

  • Android 巧妙编码引导提示UI

    开篇   本篇说说如何编写引导提示UI视图。下面通过一个示例来做详细讲解。 要达到的效果 以下是三种实施方案: 方...

  • 功能展示&&欢迎页

    app功能引导展示库 Android 用户引导库 MaterialIntroView 使用及源码分析 提示框 An...

  • Appium 每次执行用例提示Appium Android In

    现象:Android手机比如华为荣耀8执行ui自动化用例时,每次都提示安装Appium Android Input...

  • Github之安卓库总结

    Android底部导航栏████几行代码实现Tab导航(随意定制加号,带红点消息提示) 引导界面滑动导航 + 大于...

  • Android编码规范

    Android开发代码规范相关系列文章: Android命名规范 Android编码规范 Android编码规范有...

  • Bitmap

    基本概念(是什么,应用场景)以及BitMap的编码原理(做引导) BitMap类在Android类中的基本实现(基...

  • No.005-提示引导设计小结

    一. 什么是提示引导 提示引导在产品中使用范围非常广泛,其主要目的是为提示和引导用户,以达到特定的目的。提示引导的...

  • GitHub资料汇集(2014.12.14整理)

    android android-ui Android UI library. chromeos-apk Run A...

  • Ubuntu上安装Android Studio安装Trouble

    第一次启动Android Studio时,会进入引导下载时,下载完成会提示: `Unable to run mks...

  • Android编码规范指南

    title: Android编码规范指南tags: Android,基础 本文参考最全面的 Android 编码规...

网友评论

    本文标题:Android 巧妙编码引导提示UI

    本文链接:https://www.haomeiwen.com/subject/jldwmftx.html