制作Slider组件

利用as3,我们可以尝试制作一些有趣的组件,虽然现在已经有很多实用的组件,但是自己尝试写一下也是不错的。利用as3语法,借用了绘图Api我们尝试制作一下这个组件。因为我们不需要很强大的功能,对此我们只是需要选取其一部分就可以。
0_127488316140lM.gif
首先,我们所需的制作两个图形,一个是拖动的方块,一个是底图片。对于这两个图我们都不难做,采用绘图APi当中的绘制矩形的办法就能实现到。
我们需要定义个包,这个包是为了防止与flash内部组件类名称冲突如下:
package org.summerTree.components
所需要做的工作是,定义好构造函数里面的参数。设置容器,最大值和最小值。两个值就是两端的位置,以及初始化的默认值
01.//滚动的组件  
02.  
03.package org.summerTree.components  
04.{  
05.  
06.    import flash.display.Sprite;  
07.    import flash.display.Shape;  
08.    import flash.events.*;  
09.    import flash.geom.Rectangle;  
10.    import flash.display.DisplayObjectContainer;  
11.    import flash.text.*;  
12.    public class Slider extends Sprite  
13.    {  
14.  
15.        private var bar_control:Sprite;  
16.        private var values:Number=0;  
17.        private var msg:TextField=new TextField();  
18.        private var minValue:Number=0;  
19.        private var maxValue:Number=100;  
20.        private var initializtion:Number;  
21.        public function Slider(contain:DisplayObjectContainer=null,minValue:Number=0,maxValue:Number=100,initializtion:Number=0)  22.        {  
23.        }  
24.}  
在这里过程,我们导入我们所需要的包,包括事件类型,包括几何图形库等等。
我们创建Slider 作为这个组件的类名称,建立起第一步之后,我们就可以实现进行绘制图案进行创作。
第二步:创始化,
 
在这个过程当中,实例化控制的拖动的元件,并设置底的图形,在这里过程设置不同颜色以区别。并且对元件进行监听鼠标拖动,在拖动的过程当中,元件的x坐标会产生改变,这样我们需要把这个值通过计算出来传递设置value的值,
this.value=bar_control.x*(maxValue-minValue)/100+minValue;//计算元件块位置对于的值
如果按0-100这样的区间,只有我们获取到拖动的元件的坐标值,即可以得到我们所需要的数据。bar.x=[0,100]之间的区间
如果这个区间不在0-100 ,可以随意一个区间,我们则可以通过简单的换成就可以
(bar.x/bar.width)*(max-min)+min; 这样换算则可以实现到
01.private function init():void  
02.        {  
03.            //控件底座  
04.            var bar_bottom:Shape=new Shape();  
05.            addChild(bar_bottom);  
06.            bar_bottom.graphics.lineStyle(0);  
07.            bar_bottom.graphics.beginFill(0x666666);  
08.            bar_bottom.graphics.drawRect(0,0,116,16);  
09.            bar_bottom.graphics.endFill();  
10.            var array:Array=new Array();  
11.              
12.            //设置显示区域  
13.            var format:TextFormat=new TextFormat ();  
14.            format.size=5;  
15.            msg=new TextField();  
16.            msg.border=true;  
17.            msg.setTextFormat(format);  
18.            this.value=initializtion;//设置初始值  
19.            msg.text=String(this.value);  
20.            msg.width=25;  
21.            msg.height=16;  
22.            msg.x=117;  
23.            msg.y=0;  
24.            msg.selectable=false;  
25.            addChild(msg);  
26.            bar_control=new Sprite();  
27.            bar_control.x=Math.abs(initializtion-minValue)/ Math.abs(maxValue-minValue)*100;  
28.      
29.            bar_control.y=0;  
30.            addChild(bar_control);  
31.            bar_control.buttonMode=true;  
32.            bar_control.graphics.lineStyle(0);  
33.            bar_control.graphics.beginFill(0xCCCCCC);  
34.            bar_control.graphics.drawRect(0,0,16,16);  
35.            bar_control.graphics.endFill();  
36.              
37.              
38.            bar_control.addEventListener(MouseEvent.MOUSE_DOWN,onStaDragHandler);  
39.            bar_control.stage.addEventListener(MouseEvent.MOUSE_UP,onStopDragHandler);  
40.        }  
总的代码
01.//滚动的组件  
02.  
03.package org.summerTree.components  
04.{  
05.  
06.    import flash.display.Sprite;  
07.    import flash.display.Shape;  
08.    import flash.events.*;  
09.    import flash.geom.Rectangle;  
10.    import flash.display.DisplayObjectContainer;  
11.    import flash.text.*;  
12.    public class Slider extends Sprite  
13.    {  
14.  
15.        private var bar_control:Sprite;  
16.        private var values:Number=0;  
17.        private var msg:TextField=new TextField();  
18.        private var minValue:Number=0;  
19.        private var maxValue:Number=100;  
20.        private var initializtion:Number;  
21.        public function Slider(contain:DisplayObjectContainer=null,minValue:Number=0,maxValue:Number=100,initializtion:Number=0)  
22.        {  
23.            if(contain!=null)  
24.            contain.addChild(this);  
25.              
26.            this.minValue=minValue;  
27.            this.maxValue=maxValue;  
28.            this.initializtion=initializtion;//默认位置值  
29.            init();  
30.        }  
31.          
32.        private function init():void  
33.        {  
34.            //控件底座  
35.            var bar_bottom:Shape=new Shape();  
36.            addChild(bar_bottom);  
37.            bar_bottom.graphics.lineStyle(0);  
38.            bar_bottom.graphics.beginFill(0x666666);  
39.            bar_bottom.graphics.drawRect(0,0,116,16);  
40.            bar_bottom.graphics.endFill();  
41.            var array:Array=new Array();  
42.              
43.            //设置显示区域  
44.            var format:TextFormat=new TextFormat ();  
45.            format.size=5;  
46.            msg=new TextField();  
47.            msg.border=true;  
48.            msg.setTextFormat(format);  
49.            this.value=initializtion;//设置初始值  
50.            msg.text=String(this.value);  
51.            msg.width=25;  
52.            msg.height=16;  
53.            msg.x=117;  
54.            msg.y=0;  
55.            msg.selectable=false;  
56.            addChild(msg);  
57.            bar_control=new Sprite();  
58.            bar_control.x=Math.abs(initializtion-minValue)/ Math.abs(maxValue-minValue)*100;  
59.      
60.            bar_control.y=0;  
61.            addChild(bar_control);  
62.            bar_control.buttonMode=true;  
63.            bar_control.graphics.lineStyle(0);  
64.            bar_control.graphics.beginFill(0xCCCCCC);  
65.            bar_control.graphics.drawRect(0,0,16,16);  
66.            bar_control.graphics.endFill();  
67.              
68.              
69.            bar_control.addEventListener(MouseEvent.MOUSE_DOWN,onStaDragHandler);  
70.            bar_control.stage.addEventListener(MouseEvent.MOUSE_UP,onStopDragHandler);  
71.        }  
72.        private function onStaDragHandler(event:MouseEvent):void  
73.        {  
74.            bar_control.stage.addEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler);  
75.            event.currentTarget.startDrag(false,new Rectangle(0,0,100,0));//控制拖动局域        
76.        }  
77.          
78.        private function onMoveHandler(event:MouseEvent):void  
79.        {             
80.            var evt:Event=new Event(Event.CHANGE);  
81.            this.value=bar_control.x*(maxValue-minValue)/100+minValue;//计算元件块位置对于的值  
82.            msg.text=String(this.value);  
83.            this.dispatchEvent(evt);  
84.        }  
85.        //停止拖动处理  
86.        private function onStopDragHandler(event:MouseEvent):void  
87.        {  
88.            msg.text=String(this.value);  
89.            bar_control.stopDrag();  
90.            bar_control.stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler);  
91.        }  
92.        //设置拖动的值      
93.        public function set value(dataValue:Number):void  
94.        {  
95.            this.values=dataValue;  
96.        }  
97.        //返回拖动的值      
98.        public function get value():Number  
99.        {  
100.            return values;  
101.        }  
102.        //设置对象坐标  
103.        public function move(x:Number,y:Number):void  
104.        {  
105.            this.x=x;  
106.            this.y=y;  
107.        }  
108.    }  
109.}  
测试:
参数含义:第一个容器,第二个最小值,第三个最大值。调用监听事件
01.import org.summerTree.components.Slider;  
02.var i:int=0;  
03.while (i<10)  
04.{  
05.    i++;  
06.    var silder:Slider=new Slider(this);  
07.    silder.move(250,100+i*20);  
08.    silder.addEventListener(Event.CHANGE,onChange);  
09.}  
10.function onChange(event:Event):void  
11.{  
12.    trace("ww"+silder.value);  
13.}  
利用这个简单的制作,我们可以制作一些调节的参数变化,如声音大小。介于一个区间内变化的情况。
 
通过控制组件,达到声音的变化。大概制作就在如下。
在初始化的时候,需要进行加载声音,初始化组件,等待完成之后,就可以实现对音乐的参数一种交互了。
 
发布的时候,我们可以选择在网络环境进行,而本地环境调用远程的 资源会出现一种错误。不妨试试。
代码解析:
 
  使用媒体包下的sound 声音类,我们就可以进行加载本地或者远程的资源。达到播放音乐的功能,同时可以进行监听数据加载进度和错误的情况发生。
sound=new Sound();
   sound.load(new URLRequest("http://au.9you.com/download/song/22.mp3"));
   sound.addEventListener(Event.COMPLETE,onLoadComplete);
   sound.addEventListener(ProgressEvent.PROGRESS,onProgress);
   sound.addEventListener(IOErrorEvent.IO_ERROR,onError);
当完成加载声音后就可以进行播放
 
channel=sound.play(0,int.MAX_VALUE);  指定一个声道了进行播放,选择int 最大值,这个会循环int 最大值次数。
0_1274925989X555.gif
总的代码
01.package   
02.{  
03.  
04.    import flash.display.MovieClip;  
05.    import flash.events.*;  
06.    import flash.media.*;  
07.    import flash.net.*;  
08.    import flash.text.TextField;  
09.    import org.summerTree.components.Slider;  
10.  
11.    public class Main extends MovieClip  
12.    {  
13.        private var sound:Sound;  
14.        private var channel:SoundChannel=new SoundChannel();  
15.        private var Soundtrans:SoundTransform=new SoundTransform();  
16.        private var slider:Slider;  
17.        private var msg:TextField;  
18.        public function Main()  
19.        {  
20.            init();  
21.        }  
22.        private function init():void  
23.        {     
24.            slider=new Slider(this,0,100,100);  
25.            slider.move(250,200);  
26.            slider.addEventListener(Event.CHANGE,onSoundChange);  
27.              
28.            //左输入在左扬声器里播放的量。  
29.            var left_slider:Slider=new Slider(this,0,100,50);  
30.            left_slider.move(250,220);  
31.            left_slider.addEventListener(Event.CHANGE,onLeftSoundChange);  
32.              
33.            //左输入在右扬声器里播放的量。  
34.            var right_slider:Slider=new Slider(this,0,100,40);  
35.            right_slider.move(250,240);  
36.            right_slider.addEventListener(Event.CHANGE,onRightSoundChange);  
37.              
38.            //声音从左到右的平移  
39.            var pan_slider:Slider=new Slider(this,-100,100,0);  
40.            pan_slider.move(250,260);  
41.            pan_slider.addEventListener(Event.CHANGE,onPanSoundChange);  
42.              
43.            msg=new TextField();  
44.            addChild(msg);  
45.            msg.x=200;  
46.            msg.y=100;  
47.              
48.            //创建声音  
49.            sound=new Sound();  
50.            sound.load(new URLRequest("http://au.9you.com/download/song/22.mp3"));  
51.            sound.addEventListener(Event.COMPLETE,onLoadComplete);  
52.            sound.addEventListener(ProgressEvent.PROGRESS,onProgress);  
53.            sound.addEventListener(IOErrorEvent.IO_ERROR,onError);  
54.        }  
55.          
56.          
57.        private function onLeftSoundChange(event:Event):void  
58.        {  
59.               
60.             if(channel!=null)  
61.             {             
62.                 channel.soundTransform=Soundtrans;  
63.                 Soundtrans.leftToLeft=event.currentTarget.value/100;  
64.             }  
65.              
66.        }  
67.          
68.        private function onRightSoundChange(event:Event):void  
69.        {  
70.               
71.             if(channel!=null)  
72.             {             
73.                 channel.soundTransform=Soundtrans;  
74.                 Soundtrans.leftToRight=event.currentTarget.value/100;  
75.             }  
76.              
77.        }  
78.          
79.        private function onPanSoundChange(event:Event):void  
80.        {  
81.               
82.             if(channel!=null)  
83.             {             
84.                 channel.soundTransform=Soundtrans;  
85.                 Soundtrans.pan=event.currentTarget.value/100;  
86.             }  
87.              
88.        }  
89.          
90.        private function onSoundChange(event:Event):void  
91.        {  
92.            trace(slider.value);  
93.             if(channel!=null)  
94.             {             
95.                 channel.soundTransform=Soundtrans;  
96.                 Soundtrans.volume=slider.value/100;  
97.             }            
98.        }  
99.        //加载显示数据  
100.        private function onProgress(event:ProgressEvent):void  
101.        {             
102.           msg.text=String(Math.round(event.bytesLoaded/event.bytesTotal*100))+"/%";  
103.        }  
104.          
105.        private function onError(event:IOErrorEvent):void  
106.        {             
107.           msg.text="加载发生了错误";  
108.        }  
109.        private function onLoadComplete(event:Event):void  
110.        {  
111.            sound.removeEventListener(ProgressEvent.PROGRESS,onProgress);  
112.            sound.removeEventListener(Event.COMPLETE,onLoadComplete);  
113.            if(channel!=null)  
114.            channel=sound.play(0,int.MAX_VALUE);              
115.        }  
116.          
117.    }  
118.}  
 

转载于:https://www.cnblogs.com/sinsoul/archive/2011/04/08/2009441.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 编程下的四大组件之服务(Service)

服务&#xff08;Service&#xff09; 是一种在后台运行&#xff0c;没有界面的组件&#xff0c;由其他组件调用开始。Android 中的服务和 Windows 中的服务是类似的东西&#xff0c;它运行于系统中不容易被用户发觉&#xff0c;可以使用它开发如监控之类的程序。 服务&#xf…

第六章实验报告(函数和宏定义实验)

C程序设计实验报告 一、实验项目: 1、编写由三角形三边求面积的函数 2、编写求N阶乘的函数 3、求两个整数的最大公约数 4、打印输出三角形 5、求500以内的所有亲密数对 姓名&#xff1a;廖云福 实验地点&#xff1a;教学楼514教室  实验时间&#xff1a;2019.4.30 一、实验目…

mapreduce shuffle过程问答

通过hadoop权威指南学习hadoop&#xff0c;对shuffle过程一直很疑惑&#xff0c;经过查看网上多个帖子&#xff0c;最终 完成此篇问答总结。 1.什么叫shuffle 从map任务输出到reducer任务输入之间的过程就叫做shuffle 2.每个map任务都有对应的缓存吗&#xff1f;默认是多少&…

S2-016、S2-017

前言 由于S2-016、S2-017出现的原因时相同的&#xff0c;只是由于poc不一样&#xff0c;造成了不同的攻击。S2-016是RCE&#xff0c;S2-017是开发型重定向漏洞。这里将两个漏洞放一起分析。另外“Struts2系列起始篇”是我整各系列的核心&#xff0c;希望大家能花些时间先看看。…

struts 2 配置通配符

2019独角兽企业重金招聘Python工程师标准>>> 随着Web应用程序的增加&#xff0c;所需的Action也会更多&#xff0c;从而导致大量的action映射&#xff0c;使用通配符可以减少action配置的数量&#xff0c;使一些具有类似行为的Action或者Action方法可以使用通用的样…

记一次使用pt-query-digest工具分析MySQL慢查询日志

最近遇到了MySQL性能问题&#xff0c;使用percona 的 pt-query-digest工具分析性能的瓶颈点。并且pt-query-digest工具要优于MySQL本身自带的mysqldumpslow工具。 查看pt-query-digest工具在ubuntu下的安装流程请看&#xff1a;ubuntu下安装pt-query-digest_一缕阳光a的博客-CS…

Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

之前的两篇有关EF4.1的文章反响不错&#xff0c;感谢大家的支持&#xff01;想体验EF4.1的新功能&#xff1f;RTW版本已经发布啦&#xff0c;http://www.microsoft.com/downloads/en/details.aspx?FamilyIDb41c728e-9b4f-4331-a1a8-537d16c6acdf&displaylangen Entity …

[WorldWind学习]5.相机对象

首先查看WorldWindow的事件&#xff1a;OnMouseUp、OnMouseMove、HandleKeyDown&#xff0c;这几个方法中多次调用this.drawArgs.WorldCamera的各种属性实现了场景的控制&#xff0c;包括球的旋转、场景的放大缩小&#xff0c;上下移动。 1. 接下来查看CameraBase类RotationYaw…

在VS2010开发的MVC3 应用程序中设定默认的浏览器

vs2010做mvc3 开发,用的是Razor的View,想修改默认浏览器,发现右键没有"浏览方式",把View改成.aspx的,也没有找到这个选项. 解决方法两种 (1)最简单的,建个Asp.net Web应用程序,在随便一个xxx.aspx页面,右键"浏览方式"即可.. (2)通过修改项目属性也可以,右键…

android 获取lanucher 列表

引用&#xff1a;http://www.iteye.com/topic/696187 获取Launcher 启动列表 即 列出所有Launcher程序 通过PackageManager 来获取 [代码 步骤] 1. 定义内部类 LauncherItem 用于定义Application相关属性 比如&#xff1a;图标 名称 以及 ComponentName Java代码 public clas…

对int变量赋值的操作是原子的吗?

对于例子如下&#xff1a; int count 0; count; // 是原子操作吗? count; 是原子操作吗? 先说答案&#xff1a; 1、在单处理器下&#xff0c;如果将 count; 语句 翻译为单指令时&#xff0c;是原子操作。 不过现在处理器都会对语句进行优化。 2、在多处理器下&#xf…

企业面试中关于MYSQL重点的28道面试题解答

问题1&#xff1a;char、varchar的区别是什么&#xff1f; varchar是变长而char的长度是固定的。如果你的内容是固定大小的&#xff0c;你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么&#xff1f; DELETE命令从一个表中删除某一行&#xff0c;或多行&#xff0c;T…

普通的int main(){}没有写return 0;会怎么样?

结论可能大家看上面的图就知道了&#xff0c;没有加return 0;编译器会自动添加一个。那怎么证明呢&#xff1f; 可以查看相应的汇编代码&#xff0c;查看汇编代码推荐使用godbolt.org网站&#xff0c;相当方便。 如上图&#xff0c;输入C代码&#xff0c;在右半部分会显示编译…

python 内置方法 BUILT-IN METHODS

setattr getattr hasattr 1. abs() returns absolute value of a number 返回绝对值 integer -20 print(Absolute value of -20 is:, abs(integer)) 2. all() returns true when all elements in iterable is true 都为true则为true 3. any() Checks if any Element of an Ite…

并发与并行的区别

学习多线程的时候会遇到一个名词&#xff1a;并发。这是属于操作系统中的词汇&#xff0c;需要了解并发和并行的区别&#xff0c;从网上搜集了几种说法帮助理解。 一&#xff1a; 并发是指一个处理器同时处理多个任务。 并行是指多个处理器或者是多核的处理器同时处理多个不同的…

Oracle PL/SQL块 多表查询(emp员工表、dept部门表、salgrade工资等级表)

范例: 查询每个员工的编号&#xff0c;姓名&#xff0c;职位&#xff0c;工资&#xff0c;工资等级&#xff0c;部门名称●确定要使用的数据表|- emp表&#xff1a;员工的编号、姓名、职位、工资|- salgrade表&#xff1a;工资等级|- dept表&#xff1a;部门名称●确定已知的关…

多线程的互斥锁应用RAII机制

什么是RAII机制 RAII是Resource Acquisition Is Initialization&#xff08;翻译成 “资源获取即初始化”&#xff09;的简称&#xff0c;是C语言的一种管理资源、避免资源泄漏的惯用法&#xff0c;该方法依赖构造函数资和析构函数的执行机制。 RAII的做法是使用一个类对象&a…

asp.net 浏览服务器文件

http://www.csharpwin.com/dotnetspace/12018r482.shtml 前台文件file.aspx <% Page Language"C#"AutoEventWireup"true"CodeFile"file.aspx.cs"Inherits"file"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi…

pynput模块—键盘鼠标操作和监听

pynput.mouse&#xff1a;包含控制和监控鼠标或者触摸板的类。 pynput.keyboard&#xff1a;包含控制和监控键盘的类。 上面提到的子包都已被引入到pynput库中。要使用上面的子包&#xff0c;从pynput中引入即可。 下面有详细的示例文档。 控制鼠标 使用pynput.mouse控制鼠标&a…

Windows 恢复环境(Windows RE模式)

Windows 恢复环境 (Windows RE) 是一个能修复无法启动操作系统的常见问题的恢复环境。Windows 预安装环境 (Windows PE) 是具有有限服务的最小 Win32 操作系统。Windows RE 建立在 Windows 预安装环境 (Windows PE) 的基础上&#xff0c;并且可以用附加的驱动程序、语言、Windo…