最近项目上要实现语音搜索功能,界面样式要模仿一下UC浏览器的样式,UC浏览器中有一个控件,会随着声音大小浮动,然后寻思偷个懒,百度一下,结果也没有找到类似的,只能自己动手了。

先上图看我实现的效果:

这是自定义控件的代码,里面注释也很明白,就不费话了

public class CustomCircleView extends View{

private Paint mPaint;

private int strokeWidth = 0; //圆环的宽度

private Bitmap bitmap = null; // 图片位图

private int nBitmapWidth = 0; // 图片的宽度

private int nBitmapHeight = 0; // 图片的高度

private int width; //view的宽度

private int height ; //view的高度

private int bigCircleColor =0; //view的高度

private int floatCircleColor =0; //view的高度

public CustomCircleView(Context context) {

this(context, null);

}

public CustomCircleView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public CustomCircleView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomCircleView, defStyleAttr, 0);

int n = a.getIndexCount();

for (int i = 0; i < n; i++)

{

int attr = a.getIndex(i);

switch (attr)

{

case R.styleable.CustomCircleView_icon:

bitmap = BitmapFactory.decodeResource(getResources(), a.getResourceId(attr, 0));

break;

case R.styleable.CustomCircleView_bigCircleColor:

bigCircleColor = a.getColor(attr, Color.GRAY);

break;

case R.styleable.CustomCircleView_floatCircleColor:

floatCircleColor = a.getColor(attr,Color.GREEN);

break;

}

}

a.recycle();

mPaint = new Paint();

//如果布局中没有设置bigCircleColor和floatCircleColor的时候给他一个默认值

if (bigCircleColor==0){

bigCircleColor=Color.parseColor("#FFEEF0F1");

}

if (floatCircleColor==0){

floatCircleColor=Color.parseColor("#25c1f5");

}

// 获取图片高度和宽度

nBitmapWidth = bitmap.getWidth();

nBitmapHeight = bitmap.getHeight();

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int widthMode = MeasureSpec.getMode(widthMeasureSpec);

int widthSize = MeasureSpec.getSize(widthMeasureSpec);

int heightMode = MeasureSpec.getMode(heightMeasureSpec);

int heightSize = MeasureSpec.getSize(heightMeasureSpec);

//获取view的高度和宽度 这个view必须给精确值!!!!!!!!

if (widthMode == MeasureSpec.EXACTLY) {

width = widthSize;

}

if (heightMode == MeasureSpec.EXACTLY)

{

height = heightSize;

}

setMeasuredDimension(width, height);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

mPaint.setAntiAlias(true); // 消除锯齿

//绘制最外层灰色大圆

mPaint.setColor(bigCircleColor);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(height/2-nBitmapHeight/2);

//计算圆的半径稍微麻烦点,但是在图上画一下应该能明白 (height/2-nBitmapHeight/2)/2+nBitmapHeight/2

canvas.drawCircle(width/2, height/2, (height/2-nBitmapHeight/2)/2+nBitmapHeight/2, mPaint);

//绘制浮动的圆

mPaint.setColor(floatCircleColor);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(strokeWidth);

canvas.drawCircle(width/2, height/2, strokeWidth/2+nBitmapHeight/2, mPaint);

//绘制中间图标

canvas.drawBitmap(bitmap, width/2-nBitmapWidth/2, height/2-nBitmapHeight/2, mPaint);

}

//根据传入的宽度重新绘制

public void setStrokeWidth(int with){

this.strokeWidth=with;

invalidate();

}

}

在res/values 下建一个attrs文件 代码:

在布局中的使用:

android:id="@+id/customView"

android:layout_width="200dp"

android:layout_height="200dp"

android:layout_gravity="center"

app:icon="@mipmap/voice_icon"

app:floatCircleColor="@color/colorAccent"

app:bigCircleColor="@color/colorPrimaryDark"

/>

高度宽度一定要给精确值,切记啊!!!颜色值可以不设定,默认就是我上面图的效果。

然后根据音量大小直接传入数值就可以了,很简单的使用方法,这里我用随机数代替了。

customView = ((CustomCircleView) findViewById(R.id.customView));

button = ((Button) findViewById(R.id.button));

button.setOnClickListener(this);

}

@Override

public void onClick(View v) {

Random random=new Random();

customView.setStrokeWidth(random.nextInt(100));

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 语音搜索动画,Android自定义控件实现UC浏览器语音搜索效果相关推荐

  1. android 仿搜索动画,Android仿京东顶部搜索框滑动伸缩动画效果

    最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框.觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种 ...

  2. android 雷达搜索动画,Android实现微信雷达辐射搜索好友实例(逻辑清晰实现简单)...

    Android仿微信雷达扫描,仿安卓微信.云播雷达扫描动画效果点击中间的黑色圆圈开始扫描动画,再次点击复位,需要这种效果的朋友快点收藏了吧. 效果图如下: 这个界面大家肯定都非常熟悉了,下面来说一下原 ...

  3. android 自定义园动画,Android 自定View实现仿QQ运动步数圆弧及动画效果

    在之前的Android超精准计步器开发-Dylan计步中的首页用到了一个自定义控件,和QQ运动的界面有点类似,还有动画效果,下面就来讲一下这个View是如何绘制的. 1.先看效果图 2.效果图分析 功 ...

  4. android 直播评论动画,Android自定义View实现直播点赞特效

    由于开发的需要,需要开发类似直播点赞特效的需求,于是自定义View来实现这种效果 案例图: 1.自定义View import android.animation.Animator; import an ...

  5. android 文字跳动动画,Android 仿余额宝数字跳动动画效果完整代码

    Android 仿余额宝数字跳动动画效果完整代码 发布时间:2020-08-24 06:55:30 来源:脚本之家 阅读:120 作者:曾淘 一:想都不用想的,有图有真相,看着爽了,在看下面源码 二: ...

  6. android 图片查看动画,Android 共享动画实现点击列表图片跳转查看大图页面

    主要内容使用系统提供的 API 实现共享动画 在实现过程中遇到的问题图片点击和关闭之后会出现短暂的黑屏问题实现的动画效果如下: 共享动画.gif 具体实现这个效果是在两个页面之间的切换动画,既然是两个 ...

  7. Android实现蝴蝶动画,Android中的动画具体解释系列——飞舞的蝴蝶

    这一篇来使用逐帧动画和补间动画来实现一个小样例,首先我们来看看Android中的补间动画. Android中使用Animation代表抽象的动画类,该类包含以下几个子类: AlphaAnimation ...

  8. android 上下扫描动画,Android扫描雷达动画

    很简单的一个组合动画,用好基本动画啥子效果都不怕 老规矩先上图 效果图.gif ok 来 既然往下翻那就看看如何实现的吧 首先效果分为两部分 第一部分中间指针(其实这里就是一张图片) 第二部分就是波纹 ...

  9. android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画

    android实现旋转.平移.缩放和透明度渐变的补间动画,具体实现如下: 1.在新建项目的res目录中,创建一个名为anim的目录,并在该目录中创建实现旋转.平移.缩放和透明度渐变的动画资源文件. 透 ...

最新文章

  1. hbase系列之:独立模式部署hbase
  2. 苹果应用商店逾千款iOS应用存安全漏洞
  3. 运维侠客行杭州站沙龙回顾 | 云时代下的运维管理实践(附干货下载)
  4. 抽奖的箱子_王者荣耀近期问题不断,昭君星元箱子开出空气,瑶新皮涉嫌抄袭...
  5. iPhone程序中的加密处理
  6. C++ 里利用 std::ios::sync_with_stdio(false) 解决TLE问题
  7. UMEditor上传图片配置
  8. 华为回应P40石墨烯电池传闻:系谣言
  9. php session实现原理
  10. mysql one database_MYSQL学习笔记one
  11. cesium接入加载倾斜摄影(cesium篇.16)
  12. OPPO对诺基亚发起5G专利侵权诉讼
  13. 使用python爬取抖音app视频(appium可以操控手机)
  14. PN532模块复制IC加密卡
  15. linux设置共享文件夹和删除共享文件夹(vmware:linux-windows共享文件夹)
  16. Win10下通过源码编译安装QGIS
  17. 计算成绩平均分浮点数c语言,C实验四
  18. BZOJ2844-albus就是要第一个出场
  19. 在公司用手机通过4G网络上网,上网内容可能被公司监控吗?
  20. vb获取html中的inout,input conversion error-SWAT模型-Fortran语法讨论-专业Fortran论坛 -

热门文章

  1. onvif备忘录(1)--onvif简介及开发框架搭建
  2. 深入学习用Go编写HTTP服务器
  3. 在Go中使用Protobuf
  4. 突变检测软件 测试数据库,测序数据比对和变异检测
  5. dubbo+zookeeper管理控制台搭建
  6. MySQL中EXPLAIN详解
  7. Linux练习(函数调用复制文件)
  8. 【基本算法--高精度计算】大整数相加
  9. JS获取当前时间戳的方法
  10. Lenovo 媽媽咪啊,坑爹麼?(Win 7 整合 USB3 NVME )驅動