aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 17519|回复: 4

最简单的实现音频条的方法

[复制链接]

11

主题

32

回帖

338

积分

二级会员

积分
338
发表于 2018-8-9 09:35:41 | 显示全部楼层 |阅读模式
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="htmlayout播放器进度条";right=759;bottom=469)
  4. winform.add(
  5. picturebox2={cls="picturebox";left=357;top=91;right=362;bottom=132;bgcolor=0;z=2};
  6. plus={cls="plus";left=333;top=85;right=383;bottom=262;background="\res\images\camTone.png";border={left=100};foreRight=100;foreTop=100;repeat="center";y=100;z=1}
  7. )
  8. /*}}*/
  9. winform.show()
  10. math.randomize();
  11. var mmat=50;
  12. tmid = winform.setInterval(
  13.         100/*毫秒*/,
  14.         function(hwnd,msg,id,tick){//定时执行代码
  15.                 var mat=math.random(0,100)
  16.                 if(mat>=5){
  17.                         winform.picturebox2.height=mmat+mat;
  18.                 }else {
  19.                         winform.picturebox2.height=mmat-mat;
  20.                 }
  21.         }
  22. );

  23. win.loopMessage();
复制代码


camTone.png




用黑色控件覆盖底图,不过有一个缺点就是,有时候控件会刷灰色,,哇哈哈,

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-8-9 12:14:31 | 显示全部楼层
我觉得你是不是想复杂了,
plus控件本来就可以指定背景、前景合成音频条的效果,只不过示例里我用了色块,你当然可以改成图像。

变成灰的是因为plus你默认开了剪切背景,关掉就可以了。
另外控件一般是不能这样简单的前后叠加的,这个开始页的教徎里就有讲。

11

主题

32

回帖

338

积分

二级会员

积分
338
 楼主| 发表于 2018-8-9 14:51:16 | 显示全部楼层
  1. //自绘动画
  2. import win.ui;
  3. /*DSG{{*/
  4. var winform = win.form(text="自定义动画演示";right=455;bottom=286;border="thin")
  5. winform.add(
  6. plus={cls="plus";left=156;top=31;right=206;bottom=213;background="\res\images\camTone.png";repeat="tile";z=1}
  7. )
  8. /*}}*/

  9. math.randomize();

  10. tmid = winform.setInterval(
  11.         100/*毫秒*/,
  12.         function(hwnd,msg,id,tick){//定时执行代码
  13.                
  14.                 var by=math.random(0,142)
  15.                 var b2y=math.random(0,142)
  16.                 var graphics = gdip.graphics(winform.plus)   
  17. //                graphics.clear()
  18.                
  19.             var brush = gdip.solidBrush(0xFF000000);
  20.             var brush2 = gdip.solidBrush(0xFF000000);
  21.            
  22.             graphics.fillRectangle(brush, 24, 9, 4, by);
  23.             graphics.fillRectangle(brush2, 29, 9, 4, b2y);
  24.             brush.delete();
  25.             brush2.delete();
  26.             graphics.delete();
  27.         }
  28. );

  29. winform.show()
  30. win.loopMessage();
复制代码


这样吗,但是这样我不懂得怎么去清空PLUS的前景已画出的东西,
如果用//                graphics.clear()  去覆盖,会把背景色一起覆盖了, 如果用PLUS进度条的方式,那就更不知道怎么玩了,因为我这个图里有两个音频条,左声道和右声道,如果在同一个PLUS里,以我的水平,只能做到上边的方式了,还需努力学习,嘻,谢谢Jacen抽空来指导。

170

主题

2169

回帖

1万

积分

管理员

积分
13161
发表于 2018-8-9 19:10:43 | 显示全部楼层
你勇于尝试新的思路,这是非常好的,
但是这种合成动画,plus控件可以很容易的合成,用多个控件去叠加反而不好控制 - 把事情给弄复杂了。

在窗体设计器里用plus控件设置好背景前景的位置就可以实现这个效果了,
示例代码: 音频条效果.不用写代码.用plus控件直接拖出来.7z (4.48 KB, 下载次数: 426)

用plus控件自绘当然也是可以的,但并不需要去清除图像,
你每次应当先画背景图,自然就擦除上次的绘图了,当然,控件绘图并不是到定时器里去画,而是在绘图回调函数里去画,你的定时器只要调用redraw函数重绘就可以了,下面是一个完整的例子(复制就可以运行看到效果了)
import win.ui;
/*DSG{{*/
var winform = win.form(text="自定义动画演示";right=455;bottom=286;border="thin")
winform.add(
plus={cls=
"plus";left=156;top=31;right=206;bottom=213;repeat="tile";z=1}
)
/*}}*/

import inet.http;
winform.plus.background =
"http://bbs.aardio.com/data/attachment/forum/201808/09/093248gvbig6po2o2ev72o.png"

//自绘
winform.plus.onDrawForegroundEnd = function(graphics,rc){
     
var brush = gdip.solidBrush(0xFF000000);
     graphics.fillRectangle(brush,24,9,4,
owner.leftLevel:0);
     graphics.fillRectangle(brush,29,9,4,
owner.rightLevel:0);
     brush.delete();
}

//定时器
winform.setInterval(
    200,
function(){
      winform.plus.leftLevel = math.random(0,142);
      winform.plus.rightLevel = math.random(0,142);
      winform.plus.redraw();
    }
);

winform.show()
;
win.loopMessage();

11

主题

32

回帖

338

积分

二级会员

积分
338
 楼主| 发表于 2018-8-10 11:12:37 | 显示全部楼层
还是Jacen厉害,直中要害,这就是我最终想要的功能,昨天一直在想Jacen的直接用PLUS的进度条方式,搞了一天,没搞明白,今天试了下图片,好像可以,但是远没有Jacen这个来得简单。
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="htmlayout播放器进度条";right=759;bottom=469)
  4. winform.add(
  5. plus={cls="plus";left=285;top=96;right=335;bottom=273;background="\res\images\camTone.png";border={left=100};clipBk=false;clipch=1;foreRight=100;foreTop=100;repeat="center";y=100;z=1};
  6. plus3={cls="plus";left=399;top=112;right=440;bottom=294;x=3;z=2}
  7. )
  8. /*}}*/


  9. winform.plus3.background = "~/res/images/camTonebg.png";//中心颜色
  10. winform.plus3.foreground = "~/res/images/camTone.png";//环绕颜色
  11. winform.plus3.setProgressRange(1,100)

  12. var mmat=50;
  13. tmid = winform.setInterval(
  14.         100/*毫秒*/,
  15.         function(hwnd,msg,id,tick){//定时执行代码
  16.                 var mat=math.random(0,100)
  17.                 if(mat>=5){
  18.                         winform.plus3.progressPos=mmat+mat;

  19.                 }else {
  20.                         winform.plus3.progressPos=mmat-mat;
  21.                 }
  22.         }
  23. );
  24. winform.show()
  25. win.loopMessage();
复制代码

用两张图片来玩,不过想实现最终的效果,还是有点难,Jacen你这是雪中送炭呀,谢谢,超级感谢!!!!!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-9-15 20:40 , Processed in 0.071824 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表