最近项目上要实现语音搜索功能,界面样式要模仿一下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文件 代码:
<resources>
<declare-styleable name="CustomCircleView">
<attr name="bigCircleColor" format="color" />
<attr name="floatCircleColor" format="color" />
<attr name="icon" format="reference" />
</declare-styleable>
</resources>
在布局中的使用:
<com.example.administrator.mycustomcircleview.CustomCircleView 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 SearchView不显示搜索icon的问题
# Android开发之搜索框SearchView用法示例
# Android自定义View实现搜索框(SearchView)功能
# Android仿简书动态searchview搜索栏效果
# Android搜索框(SearchView)的功能和用法详解
# Android搜索框SearchView属性和用法详解
# Android SearchView搜索框组件的使用方法
# Android搜索框组件SearchView的基本使用方法
# 可支持快速搜索筛选的Android自定义选择控件
# Android SearchView搜索控件使用方法详解
# 这是
# 随机数
# 给他
# 也很
# 我用
# 看我
# 很简单
# 就是我
# 自定义
# 没有找到
# 话了
# 自己动手
# 大家多多
# 上要
# 就可以
# 搜索功能
# 图上
# 上图
# 有一个
# 默认值
相关文章:
建站之星ASP如何实现CMS高效搭建与安全管理?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
建站之星会员如何解锁更多建站功能?
建站主机与虚拟主机有何区别?如何选择最优方案?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何在IIS中配置站点IP、端口及主机头?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
如何在万网开始建站?分步指南解析
如何在阿里云虚拟主机上快速搭建个人网站?
手机网站制作与建设方案,手机网站如何建设?
济南专业网站制作公司,济南信息工程学校怎么样?
如何在IIS中新建站点并解决端口绑定冲突?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星安装后如何自定义网站颜色与字体?
高防服务器租用指南:配置选择与快速部署攻略
如何快速搭建个人网站并优化SEO?
如何快速搭建高效服务器建站系统?
建站之星展会模版如何一键下载生成?
制作网站的软件免费下载,免费制作app哪个平台好?
宝塔建站助手安装配置与建站模板使用全流程解析
常州企业建站如何选择最佳模板?
TestNG的testng.xml配置文件怎么写
宝塔建站无法访问?如何排查配置与端口问题?
大连网站制作公司哪家好一点,大连买房网站哪个好?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
建站主机选择指南:服务器配置与SEO优化实战技巧
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
制作网站的基本流程,设计网站的软件是什么?
建站之星北京办公室:智能建站系统与小程序生成方案解析
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何在七牛云存储上搭建网站并设置自定义域名?
如何在局域网内绑定自建网站域名?
宝塔Windows建站如何避免显示默认IIS页面?
如何在阿里云购买域名并搭建网站?
如何零基础开发自助建站系统?完整教程解析
临沂网站制作公司有哪些,临沂第四中学官网?
公司门户网站制作流程,华为官网怎么做?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
建站之星免费模板:自助建站系统与智能响应式一键生成
山东网站制作公司有哪些,山东大源集团官网?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
攀枝花网站建设,攀枝花营业执照网上怎么年审?
*请认真填写需求信息,我们会在24小时内与您取得联系。