新手引导之控件高亮显示

  最近项目需要做一个新手引导的功能, 即某个功能控件高亮,其他部分覆以蒙版效果,如下图所示:

实现步骤如下:

自定义view  重写onDraw(Canvas canvas)

          

            1 绘制一个屏幕大小的遮罩层

            

bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
temp = new Canvas(bitmap);

// 背景画笔
Paint bgPaint = new Paint();
if (backgroundColor != 0)
    bgPaint.setColor(backgroundColor);
else
    bgPaint.setColor(getResources().getColor(R.color.shadow));

// 绘制屏幕背景
temp.drawRect(0, 0, temp.getWidth(), temp.getHeight(), bgPaint);

            2 计算出高亮控件的位置(中心点)

final int targetLoc[] = new int[2];
 // 获取锚点View在屏幕上的左上角坐标位置
targetView.getLocationOnScreen(targetLoc);
center = new int[2];
// 获取中心坐标
center[0] = targetLoc[0] + targetView.getWidth() / 2;
center[1] = targetLoc[1] + targetView.getHeight() / 2;


            3 根据中心点位置 绘制高亮区 

          通过设置  PaintPorterDuffXfermode属性来实现

if (mCirclePaint == null)
    mCirclePaint = new Paint();
porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT);// 或者CLEAR
mCirclePaint.setXfermode(porterDuffXfermode);
mCirclePaint.setAntiAlias(true);
// 绘制到屏幕
canvas.drawBitmap(bitmap, 0, 0, bgPaint);
bitmap.recycle();



          PorterDuffXfermode属性介绍:orterDuffXfermode就是图形混合模式的意思,PorterDuffXfermode能做些什么呢?我们先来看一张API DEMO里的图片:


这张图片从一定程度上形象地说明了图形混合的作用,两个图形一圆一方通过一定的计算产生不同的组合效果,在API中Android为我们提供了18种(比上图多了两种ADD和OVERLAY)模式: 

  ADD:饱和相加,对图像饱和度进行相加,不常用

  CLEAR:清除图像

  DARKEN:变暗,较深的颜色覆盖较浅的颜色,若两者深浅程度相同则混合

  DST:只显示目标图像

  DST_ATOP:在源图像和目标图像相交的地方绘制【目标图像】,在不相交的地方绘制【源图像】,相交处的效果受到源图像和目标图像alpha的影响

  DST_IN:只在源图像和目标图像相交的地方绘制【目标图像】,绘制效果受到源图像对应地方透明度影响

  DST_OUT:只在源图像和目标图像不相交的地方绘制【目标图像】,在相交的地方根据源图像的alpha进行过滤,源图像完全不透明则完全过滤,完全透明则不过滤

  DST_OVER:将目标图像放在源图像上方

  LIGHTEN:变亮,与DARKEN相反,DARKEN和LIGHTEN生成的图像结果与Android对颜色值深浅的定义有关

  MULTIPLY:正片叠底,源图像素颜色值乘以目标图像素颜色值除以255得到混合后图像像素颜色值

  OVERLAY:叠加

  SCREEN:滤色,色调均和,保留两个图层中较白的部分,较暗的部分被遮盖

  SRC:只显示源图像

  SRC_ATOP:在源图像和目标图像相交的地方绘制【源图像】,在不相交的地方绘制【目标图像】,相交处的效果受到源图像和目标图像alpha的影响

  SRC_IN:只在源图像和目标图像相交的地方绘制【源图像】

  SRC_OUT:只在源图像和目标图像不相交的地方绘制【源图像】,相交的地方根据目标图像的对应地方的alpha进行过滤,目标图像完全不透明则完全过滤,完全透明则不过滤

  SRC_OVER:将源图像放在目标图像上方

  XOR:在源图像和目标图像相交的地方之外绘制它们,在相交的地方受到对应alpha和色值影响,如果完全不透明则相交处完全不绘制


        

参考:

https://www.cnblogs.com/libertycode/p/6290497.html






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QWave是一款基于Qt框架开发的音频波形显示控件,可以用来在Qt应用程序中实现音频波形的显示和控制。该控件支持WAV、MP3、OGG等常用音频格式,支持多种显示模式和操作,可以实现实时显示、滚动播放和缩放等功能。通过使用QWave控件,可以轻松地开发出具有音频功能的多媒体应用程序,如音频播放器、录音器等。 同时,QWave控件还支持跨平台运行,可以在多种操作系统和Qt版本下运行。其开源免费的特点,也为广大开发者提供了便捷和经济的选择。如果您需要在您的Qt应用程序中添加音频波形显示功能,不妨考虑使用QWave控件。您可以到QWave项目官网或github等开源代码库中下载最新的QWave源代码和使用文档。谢谢。 ### 回答2: Qt是一种跨平台的C++框架,它提供了许多常用的控件和功能,方便开发人员进行桌面应用程序的开发。其中,qwave是一款Qt的音频波形显示控件,它可以实现对音频波形进行可视化展示。 该控件可以直接从Qt官网上的软件中心进行下载和安装,也可以在GitHub等代码托管平台上找到相关的开源库进行下载和使用使用qwave控件可以方便地实现对音频文件的读取和展示,同时还可以实现波形颜色、粗细、放大缩小等操作。 在使用qwave控件之前,需要先进行安装和集成。安装和集成的过程可以参考官方文档和教程,具体步骤包括下载安装包、解压、编译等。安装完成后,在Qt的项目文件中添加qwave的头文件和库文件,即可在程序中调用该控件。 除了qwave,还有其他一些类似控件,如Qt的音频可视化插件QwtAudio。这些控件都可以方便地进行音频波形展示、分析和处理,加快开发人员的开发效率。 ### 回答3: qwave是一个基于Qt框架的音频波形显示控件,适合于QT开发者用于自己的音频软件项目中,它可以实现音频波形的显示、放大、缩小、移动等操作。通过将qwave控件添加到项目中,开发者可以快速方便地实现音频波形的可视化。 如果需要下载qwave控件,可以通过GitHub源码库访问qwave控件的下载链接。在GitHub官网上搜索“qwave”,即可找到开源代码和下载链接。此外,还可以直接在Qt Creator中安装qwave控件,方法是在项目的.pro文件中添加一行代码:“QT += qwave”,Qt Creator将自动引用库文件。 在使用qwave控件时,需要注意一些问题。首先,需要熟悉Qt框架的基本概念和部件组件,以便能够正确地安装、运行和使用qwave控件。其次,需要针对具体的音频软件项目,进行一些修饰和调整,满足项目需求。最后,需要对使用qwave控件的代码进行测试,确保其稳定性和可靠性,减少项目出错的风险。 总之,qwave是一个强大的音频波形显示控件使用方便,可以在很多项目中帮助开发者实现音频波形的可视化。下载和使用qwave控件需要一定的技术基础和对Qt框架的了解,开发者可以通过学习和实践,逐渐掌握其使用技巧和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值