Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中获得类似声云的波形seekbar_Java_Android_Animation_Waveform - Fatal编程技术网

Java 如何在Android中获得类似声云的波形seekbar

Java 如何在Android中获得类似声云的波形seekbar,java,android,animation,waveform,Java,Android,Animation,Waveform,我用我的代码生成了一个简单的波形,如下图所示 但是我想在每一条线之间留出更多的间隙,我想让它像下图中的声音云波一样 这是我的密码: 公共类AudioWaveSeekBar扩展视图{ 私人静电涂料; 私人静电涂料; 私有整数宽度; 私人内部高度; 私人浮动startX; 私有int thumbX=0; 私有视图parentView; 私人语境; 私有int thumbDX=0; 专用字节[]波形字节; 私有布尔值=false; 私有布尔startDraging=false; 私人seekbar

我用我的代码生成了一个简单的波形,如下图所示

但是我想在每一条线之间留出更多的间隙,我想让它像下图中的声音云波一样

这是我的密码:

公共类AudioWaveSeekBar扩展视图{
私人静电涂料;
私人静电涂料;
私有整数宽度;
私人内部高度;
私人浮动startX;
私有int thumbX=0;
私有视图parentView;
私人语境;
私有int thumbDX=0;
专用字节[]波形字节;
私有布尔值=false;
私有布尔startDraging=false;
私人seekbarchaneglistener seekbarchaneglistener;
私有int innerColor=0xffafbcd7;
private int outerColor=0xff3b5998;
专用int pressedColor=0xffa7b8dc;
私有整数持续时间;
公共AudioWaveSeekBar(上下文){
这个(上下文,空);
}
公共AudioWaveSeekBar(上下文、属性集属性){
这(上下文,属性,0);
}
公共AudioWaveSeekBar(上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
this.context=上下文;
if(paintInner==null){
paintInner=新油漆();
paintOuter=新油漆();
}
}
公共静态浮点dip2px(上下文上下文,浮点dp){
返回dp*context.getResources().getDisplayMetrics().density;
}
公共静态浮点px2cm(上下文,浮点cm){
返回(cm/2.54f)*context.getResources().getDisplayMetrics().density;
}
公共无效设置seekbarchaneglistener(seekbarchaneglistener seekBarDelegate){
seekbarchaneglistener=seekBarDelegate;
}
公共void setColors(int-inner、int-outer、int-selected){
innerColor=内部;
外层颜色=外层;
按颜色=已选择;
}
公共波形(字节[]波形){
波形字节=波形;
使无效();
}
公共进度(浮动进度){
如果(持续时间!=0)
进度=进度/持续时间;
其他的
进度=0;
thumbX=(int)Math.ceil(宽度*进度);
if(thumbX<0){
拇指X=0;
}else if(拇指X>宽度){
拇指X=宽度;
}
使无效();
}
公共void setParentView(视图){
父视图=视图;
}
公共void setDuration(int duration){
这个。持续时间=持续时间;
}
公共无效设置大小(整数w,整数h){
宽度=w;
高度=h;
使无效();
}
@凌驾
公共布尔onTouchEvent(运动事件){
布尔结果=onTouch(event.getAction(),event.getX(),event.getY());
如果(结果)
使无效();
返回结果| | super.onTouchEvent(事件);
}
公共布尔onTouch(整数操作、浮点x、浮点y){
if(action==MotionEvent.action\u DOWN){
如果(0 px2cm(上下文,0.2f)){
if(parentView!=null&&parentView.getParent()!=null){
parentView.getParent().RequestDisallowWinterCeptTouchEvent(true);
}
StartDraging=真;
startX=-1;
}
返回true;
}
}
返回false;
}
@凌驾
仅限受保护的空心布局(布尔值已更改、整数左侧、整数顶部、整数右侧、整数底部){
超级。仅限布局(已更改、左、上、右、下);
设置大小(右-左,下-上);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
如果(波形字节==null | |宽度==0){
返回;
}
float totalBarsCount=宽度/dip2px(上下文,3);
if(totalBarsCount max)max=波兆字节[i];
如果(波字节[i]=Build.VERSION\u code.LOLLIPOP)
canvas.drawRoundRect(x,height-Math.max(dip2px(context,3),height*value/max),x+dip2px(context,3),height,50,50,paintOuter);
其他的
drawRect(x,height-Math.max(dip2px(context,3),height*value/max),x+dip2px(context,3),height,paintOuter);
}否则{
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP)
canvas.drawRoundRect(x,height-Math.max(dip2px(context,3),height*value/max),x+dip2px(context,3),height,50,50,paintInner);
其他的
drawRect(x,height-Math.max(dip2px(context,3),height*value/max),x+dip2px(context,3),height,paintInner);
if(x=Build.VERSION\u CODES.LOLL