自定义控件实现uc浏览器语音搜索效果
来源:互联网 发布:华讯网络校园招聘一面 编辑:程序博客网 时间:2024/05/18 01:02
最近项目上要实现语音搜索功能,界面样式要模仿一下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);}@Overridepublic void onClick(View v) { Random random=new Random(); customView.setStrokeWidth(random.nextInt(100));}我也是自定义路上的小菜鸟,希望大家可以给我提供建议,我们一起成长!
如果我的这篇文章对你有帮助,希望你动动手指帮我点个赞!谢谢!
0 0
- 自定义控件实现uc浏览器语音搜索效果
- 安卓自定义控件-实现IOS版UC浏览器三点加载动画效果
- CoordinatorLayout使用自定义Behavior实现UC浏览器顶栏效果
- Behavior实现UC浏览器首页动画效果
- Android自定义popupwindow实现ios中UC浏览器中长按图片弹出的PopupWindow效果
- UC浏览器主界面滑动折叠效果 使用自定义behavior实现 难度五颗星*****
- 实现拉绳效果(类似UC浏览器首页效果)
- UC浏览器下拉效果
- iOS 仿 UC 浏览器个人中心 (下拉实现果冻效果)
- JS实现仿UC浏览器前进后退效果
- iOS 仿 UC 浏览器个人中心 (下拉实现果冻效果)
- .net 实现 语音搜索(仅限WebKit内核浏览器)
- .net 实现 语音搜索(仅限WebKit内核浏览器)
- .net实现语音搜索(仅限WebKit内核浏览器)
- Android自定义搜索效果的实现
- Android自定义View实现搜索动画效果
- 举例说明如何实现使用线程来实现UC浏览器的等待页面的效果
- 高仿UC浏览器弹出菜单效果
- Double Profiles CodeForces
- Linux(文件的用途)
- JQUERY 登录验证
- MathType中如何实现上下两行公式“=”号或者任意地方对齐
- JavaScript 中的字符串分割 slice()、substr()、substring()
- 自定义控件实现uc浏览器语音搜索效果
- ThinkPad T440 日常使用吐槽(一)
- SQL常用增删改查语句
- 诗词歌赋、名言警句
- 兼容CommonJS规范, AMD规范和浏览器端的js写法
- Android使用代码为textview设置drawableLeft
- 银行卡磁道加密-1
- 对于算法导论阅读的感想
- 什么是LoRa?