视频播放器源码

合集下载

java视频播放器源代码

java视频播放器源代码

import java.awt.*;import java.io.*;import java.util.*;import javax.media.*;import javax.media.format.*;import javax.swing.*;public class VideoPlayer implements ControllerListener {Vector audioCapDevList = null;Vector videoCapDevList = null;CaptureDeviceInfo audioCapDevInfo = null;CaptureDeviceInfo videoCapDevInfo = null;MediaLocator audioCapDevLoc = null;MediaLocator videoCapDevLoc = null;Player audioPlayer;Player videoPlayer;public void initAudioCapDevLoc() {//这里可以填写其它的音频编码格式,具体请看AudioFormat类audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR));if ((audioCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0);audioCapDevLoc = audioCapDevInfo.getLocator();} else {System.out.println("找不到音频采集设备");System.exit(0);}}public void initVideoCapDevLoc() {//这里可以填写其它的编码视频格式,具体请看VideoFormat类videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));if ((videoCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个videoCapDevInfo = (CaptureDeviceInfo)videoCapDevList.elementAt(0);videoCapDevLoc = videoCapDevInfo.getLocator();} else {System.out.println("找不到视频采集设备");System.exit(0);}}public void initAudioPlayer() {try {audioPlayer = Manager.createPlayer(audioCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变audioPlayer.addControllerListener(this);audioPlayer.realize();}public void initVideoPlayer() {try {videoPlayer = Manager.createPlayer(videoCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变videoPlayer.addControllerListener(this);videoPlayer.realize();}public void stopAndClosePlayer(){audioPlayer.stop();audioPlayer.close();videoPlayer.stop();videoPlayer.close();}public synchronized void controllerUpdate(ControllerEvent ce) { Player p = (Player) ce.getSourceController();JFrame jFrame = new JFrame();Component com;if (p == null) {return;}//如果player的状态变为Realizedif (ce instanceof RealizeCompleteEvent) {if ((com = p.getControlPanelComponent()) != null) {jFrame.add(com, BorderLayout.SOUTH);}if ((com = p.getVisualComponent()) != null) {jFrame.add(com, BorderLayout.NORTH);}jFrame.setVisible(true);jFrame.pack();jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p.start();}}public static void main(String args[]) {V ideoPlayer cap = new VideoPlayer();cap.initAudioCapDevLoc();cap.initVideoCapDevLoc();cap.initAudioPlayer();cap.initVideoPlayer();try {Thread.currentThread().sleep(20000);//20秒后停止并关闭播放器 } catch (InterruptedException ex) {}cap.stopAndClosePlayer();}}。

Android开发—SeeJoPlayer视频播放器源码解析

Android开发—SeeJoPlayer视频播放器源码解析

2020.03.27 v1.2.0 beta版:更新说明:一、完美支持android1.五、android1.六、android2.0、android2.0一、android2.1平台;2、完美支持320×480、480×800、480×854等各类分辨率(自适应屏幕分辨率);3、支持在线音视频播放,支持URL input和从浏览器调用SeeJoPlayer播放器播放在线音视频;4、自动转为横屏播放,为用户提供更好的观看体验;5、修改了没有SD卡程序出错的Bug;6、美化了视频播放列表和操作说明的界面。

第一部份:功能介绍SeeJoPlayer的优势要紧在相对还算美观的界面和便利的交互操作上。

先说操作吧,它支持:一、全屏切换: 双击屏幕二、播放/暂停: 长按屏幕3、静音/恢复: 长按音量按钮4、播放列表: 操纵面板最右边的按钮(暂不支持编辑功能)五、音量调剂: 单击音量按钮,在弹出的音量显示区域触摸改变音量这些操作和PC上的播放器较为类似,希望大伙儿能用得适应。

至于界面的话,多说无益,直接上图吧:第二部份:源码解析一、VideoView与视频比例缩放:咱们能够很方便的取得VideoView的源代码,最简单的方式是直接在上找“.java”。

因此重写VideoView的进程其实只是在原先的基础上进行一些修改罢了,并非一个很麻烦的工作。

什么缘故Android自带的VideoView会维持视频的长宽比而不能让咱们很方便的自概念比例呢?我猜想可能Google 做Android也是一个很仓促的工程,许多代码并无考虑得太成熟。

VideoView的源码中有如此一段代码:1 @Override2 3 4 5 6 7 8 9101112131415161718192021222324252627protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec){//Log.i("@@@@", "onMeasure");int width = getDefaultSize(mVideoWidth, widthMeasureSpec);int height = getDefaultSize(mVideoHeight, heightMeasureSpec);if(mVideoWidth >0&& mVideoHeight >0){if( mVideoWidth * height > width * mVideoHeight ){//Log.i("@@@", "image too tall, correcting");height = width * mVideoHeight / mVideoWidth;}elseif( mVideoWidth * height < width * mVideoHeight ){//Log.i("@@@", "image too wide, correcting");width = height * mVideoWidth / mVideoHeight;}else{//Log.i("@@@", "aspect ratio is correct: " +//width+"/"+height+"="+//mVideoWidth+"/"+mVideoHeight);}}//Log.i("@@@@@@@@@@", "setting size: " + width + 'x' + height); setMeasuredDimension(width, height);}这确实是什么缘故长宽比不能改变的缘故了。

视频播放器的程序设计及代码示例

视频播放器的程序设计及代码示例

视频播放器的程序设计及代码示例一、介绍视频播放器是一种常用的应用程序,用于播放电影、电视剧、MV等各种类型的视频文件。

它可以提供良好的用户体验,具备快进、快退、调节音量、全屏播放等功能。

在本文中,将介绍视频播放器的程序设计原理,并给出一些示例代码来帮助读者更好地理解和实践。

二、程序设计原理1. 用户界面设计:视频播放器的用户界面需要简洁明了,并提供直观的操作按钮,如播放、暂停、停止、快进/快退、音量调节等。

可以使用图标、按钮、滑块等控件来实现,并合理布局,以便用户轻松地操作和控制播放器。

2. 视频解码与显示:视频播放器需要将视频文件进行解码,并实时将解码后的图像进行显示。

常见的视频解码算法有H.264、MPEG-2等。

可以使用像素缓冲区来存储解码后的图像数据,并使用界面库或图形库将图像数据显示在屏幕上。

3. 音频解码与播放:视频文件中通常包含音频轨道,视频播放器需要将音频数据解码并实时播放。

音频解码可以使用MP3、AAC等常见的音频解码算法。

播放音频可以使用操作系统提供的音频播放接口,如Windows下的DirectSound、Linux下的ALSA等。

4. 文件格式支持:视频播放器需要支持常见的视频文件格式,如MP4、AVI、MKV等。

这涉及到对不同格式文件的解析和支持,需要使用相应的解析库或者开源框架。

5. 视频控制功能:视频播放器除了基本的播放、暂停、停止功能外,还应该提供快进/快退、跳转指定位置、循环播放、调节音量和亮度等高级控制功能。

通过对用户操作的监测,可以实现这些功能,并更新界面以反映当前的播放状态。

三、代码示例以下是一个基于Java编写的简单视频播放器的代码示例,用于展示播放视频文件和基本的控制功能:```javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.File;import ponent.EmbeddedMediaPlayerComponent;import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;public class SimpleVideoPlayer {private JFrame frame;private JPanel playerPanel;private JButton playButton;private JButton pauseButton;private JButton stopButton;private EmbeddedMediaPlayer mediaPlayer;public SimpleVideoPlayer() {frame = new JFrame("Simple Video Player");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(800, 600);playerPanel = new JPanel();frame.getContentPane().add(playerPanel, BorderLayout.CENTER);playButton = new JButton("Play");pauseButton = new JButton("Pause");stopButton = new JButton("Stop");playerPanel.add(playButton);playerPanel.add(pauseButton);playerPanel.add(stopButton);mediaPlayer = newEmbeddedMediaPlayerComponent().getMediaPlayer();playButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {mediaPlayer.play();}});pauseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.pause();}});stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.stop();}});frame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {SimpleVideoPlayer player = new SimpleVideoPlayer();}});}}```这段代码使用了Java语言,基于VLCJ (VLC Java Bindings)库来实现视频播放器。

yuv420视频播放器 opencv

yuv420视频播放器 opencv

Yuv420视频播放器该播放器需要依赖opencv库:以下是程序源码:/************************************************************************************** ******************************************* 按ESC退出播放,Space暂停播放,左键快退,右键快进,在暂停模式下,左键显示前一帧,右键显示后一帧,space继续播放,ESC退出*************************************************************************************** ******************************************/#include<highgui.h>#include<stdio.h>#include<cv.h>#include<conio.h>#include"yu.h"#define Width 352#define Height 288#define FrameSize ( Width*Height*3/2) //YUV一帧图像大小int timer; //进度条int pos = 0; //用于寻找下一帧位置int frame_total; //帧数//yuv转rgb,然后将rgb转换进imagevoid YUV_to_RGB(unsigned char* pYUV, unsigned char* pRGB, int width, int height){unsigned char* point_Y = pYUV; //找到Y、U、V在内存中的首地址unsigned char* point_U = pYUV + height*width;unsigned char* point_V = point_U + (height*width / 4);unsigned char* pBGR = NULL;unsigned char R = 0;unsigned char G = 0;unsigned char B = 0;unsigned char Y = 0;unsigned char U = 0;unsigned char V = 0;double temp = 0;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){pBGR = pRGB + i*width * 3 + j * 3; //找到相应的RGB首地址Y = *(point_Y + i*width + j); //取Y、U、V的数据值U = *point_U;V = *point_V;//yuv转rgb公式//yuv转rgb公式temp = Y + ((1.773) * (U - 128));if (temp<0)B = 0;else if (temp>255)B = 255;elseB = (unsigned char)temp;temp = (Y - (0.344) * (U - 128) - (0.714) * (V - 128));if (temp<0)G = 0;else if (temp>255)G = 255;elseG = (unsigned char)temp;temp = (Y + (1.403)*(V - 128));if (temp<0)R = 0;else if (temp>255)R = 255;elseR = (unsigned char)temp;*pBGR = B; //将转化后的rgb保存在rgb内存中,b存放在最低位*(pBGR + 1) = G;*(pBGR + 2) = R;if (j % 2 != 0){point_U++;point_V++;}}if (i % 2 == 0){point_U = point_U - width / 2;point_V = point_V - width / 2;}}}void time_trackbar(int){pos = timer * FrameSize;}void display_instruction(){printf(" -----------------------------------------------------------\n");printf("| Operation Instruction |\n");printf("| |\n");printf("| when start: |\n");printf("| Esc : Exit |\n");printf("| Space : Stop |\n");printf("| -> : forward |\n");printf("| <- : backward |\n");printf("| when stop: |\n");printf("| Esc : Exit |\n");printf("| Space : Start |\n");printf("| -> : next frame |\n");printf("| <- : last frame |\n");printf("| |\n");printf("| Deadline_h |\n");printf("|___________________________________________________________|\n"); }void clear(){printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");}int main(int argc, char * argv[]){int keynum;int save_win = 33;int win_tmp = -1;FILE *f; //打开文件if (!(f = fopen("demo.yuv", "rb"))) //需在项目文件夹下printf("file open error!");display_instruction();fseek(f, 0, SEEK_END); //文件位置定位到文件尾巴即可知道总共有多少位数据,位数/(每帧位数) = 帧数frame_total = (int)((int)ftell(f) / ((Width * Height * 3) / 2)); //计算有多少帧图像fseek(f, 0, SEEK_SET);//文件位置定位到文件头unsigned char *pBuf = new unsigned char[Width*Height * 3 / 2]; //开辟缓冲区存放一帧图片信息unsigned char *pRGB = new unsigned char[3 * Width*Height];IplImage * image = cvCreateImageHeader(cvSize(Width, Height), IPL_DEPTH_8U, 3); //创建image,大小为Width*Height,数据类型为IPL_DEPTH_8U,3通道char TrackbarName[50]; //进度条名称定义sprintf(TrackbarName, "%d", frame_total);while (1) //视频的播放,循环播放{fseek(f, pos, SEEK_SET); //借助变量pos准确找到每帧图片的开头位置,并读入pBuf fread(pBuf, 1, FrameSize, f);YUV_to_RGB(pBuf, pRGB, Width, Height); //yuv转rgb,然后将rgb转换进imagecvSetData(image, pRGB, Width * 3);cvShowImage("yuv播放器", image); //显示图片cvCreateTrackbar(TrackbarName, "yuv播放器", &timer, frame_total, time_trackbar);//创建进度条keynum = cvWaitKey(33); //按键扫描if (timer > frame_total - 1) //播放完后,跳回开头,但是不播放{pos = 0;keynum = 32;}if (keynum == 27)//ESC按键按下,退出程序{cvDestroyWindow("yuv播放器"); //释放内存//cvReleaseImage(&image);delete pBuf;delete pRGB;fclose(f);clear(); //清屏printf("yuv player exit\n");return 0;}if (keynum == 0x250000 && (timer > 40)) // -> 按下,快退,步长为40帧{pos -= (40 * FrameSize);timer -= 40;}if (keynum == 0x270000 && (timer < frame_total - 40)) // <- 按下,快退,步长为40帧{pos += (40 * FrameSize);timer += 40;}if (keynum == 32) //如果按下space键则暂停{while (1){keynum = cvWaitKey(33);if (keynum == 32) //再次按下space键则跳出循环,重新开始播放{break;}if (keynum == 27) //ESC按键按下,退出程序{cvDestroyWindow("yuv播放器"); //释放内存//cvReleaseImage(&image);delete pBuf;delete pRGB;fclose(f);clear(); //清屏printf("yuv player exit\n");return 0;if (keynum == 0x250000 && (timer > 1)) // <- 按下,单帧快退{pos -= FrameSize;timer--;}if (keynum == 0x270000 && (timer < frame_total - 1)) // -> 按下,单帧快进{pos += FrameSize;timer++;}cvCreateTrackbar(TrackbarName, "yuv播放器", &timer, frame_total, time_trackbar); //创建进度条fseek(f, pos, SEEK_SET);fread(pBuf, 1, FrameSize, f);YUV_to_RGB(pBuf, pRGB, Width, Height);cvSetData(image, pRGB, Width * 3);cvShowImage("yuv播放器", image);}}timer++; //每播放一帧,time_slider自加pos += FrameSize;}}视频播放效果:。

MediaPlayerClassic-HC源代码分析

MediaPlayerClassic-HC源代码分析

MediaPlayerClassic-HC源代码分析Media Player Classic - Home Cinema (mpc-hc)播放器⼀个经典的影⾳播放器,免费软件,可播放CD、VCD、DVD、及MP3、MP4、AVI、AAC等多种影⾳格式。

与此同时,它还是开源的。

今天尝试着编译了⼀下它的源代码(还是第⼀次接触这么⼤的MFC⼯程)第⼀步::准备(注意:就算⾃⼰电脑上有MSYS_MinGW,也建议下载这个)2. 在 "C:\mpc-hc" 创建⼀个"er.bat",内容如下(有些参数根据⾃⼰系统确定):@ECHO OFFSET "MPCHC_MSYS=C:\MSYS"SET "MPCHC_MINGW32=%MPCHC_MSYS%\mingw"SET "MPCHC_MINGW64=%MPCHC_MINGW32%"REM Git is optional to set if you chose to add it in PATH when installing it(下⾯这条可以不要)SET "MPCHC_GIT=C:\Program Files (x86)\Git"第三步:编译1.使⽤Git 下载 MPC-HC's 到 "C:\mpc-hc" (其他地⽅也⾏)Git命令(俩都⾏):或:2. 打开sln⽂件 "C:\mpc-hc\mpc-hc.sln",编译之(注:如果Release编译不成功,可以试试编译Release-Lite)3. 在"C:\mpc-hc\bin\mpc-hc_x86"下得到"mpc-hc.exe"4. 打开sln⽂件 "C:\mpc-hc\mpciconlib.sln",编译之5. 得到"mpciconlib.dll"6. 打开sln⽂件 "C:\mpc-hc\mpcresources.sln",编译之7. 得到 "mpcresources.XX.dll"注:直接运⾏"build.bat" 可以编译所有⽂件Media Player Classic - Home Cinema (mpc-hc)播放器⼀个经典的影⾳播放器,可播放CD、VCD、DVD、及MP3、MP4、AVI、AAC等多种影⾳格式。

播放器代码大全

播放器代码大全

播放器代码大全autostart="true"中true或1表示自动播放,false或0表示手动播放loop="true" 中的true或1表示重复播放,false或0表示只播放一次width= height= 中的数字分别表示播放器的宽度和高度=0表示隐藏播放器EnableContextMenu="0" 禁右键ShowStatusBar="1" (带显示文件播放信息)1隐藏播放器(不循环)代码:<EMBED src=音乐网址hidden=true type=audio/x-ms-wmaAUTOSTART="1">2.隐藏播放器(循环播放)代码:<EMBED src=音乐网址hidden=true type=audio/mpegAUTOSTART="1" loop="-1">3.黑色皮肤播放器代码:<EMBED style="FILTER: xray()" src=音乐网址width=360 height=30 type=audio/mpeg volume="0" autostart="1" loop="-1">4.淡蓝色播放器代码:<EMBED src=播放地址 width=300 height=45 type=audio/mpegloop="-1" autostart="1" volume="0">5.迷幻播放器代码:<TABLE style="FILTER: Alpha(Opacity=100, FinishOpacity=0,Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)gray(); WIDTH: 400px; HEIGHT: 83px"><TBODY><TR><TD><EMBED src=播放地址 width=400 height=40 type=audio/mpeg panel="0" autostart="1" loop="true"></TD></TR></TBODY></TABLE>6.带菜单的播放器代码:<EMBEDpluginspage=/windows/mediaplayer/downlo ad/default.asp width=400 height=172 type=application/x-mplayer2 FileName="音乐网址" SHOWCONTROLS="1" SHOWSTATUSBAR="1" SHOWDISPLAY="1" SHOWGOTOBAR="1"AUTOSTART="true" PlayCount="1">7.深黄色带菜单播放器代码:<EMBED style="FILTER: invert()" src=音乐网址width=320 height=45 type=audio/x-ms-wma ShowStatusBar="1" loop="true"autostart="true">8.灰色播放器代码:<EMBED style="FILTER: Gray()" src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1"ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>9.灰白色播放器代码:<embed style="FILTER: Gray()" src=链接地址width=300 height=45 loop="-1" autostart="true"></EMBED>10.带菜单的蓝色播放器代码:<EMBED src="链接地址" width=300 height=69type=application/x-mplayer2 loop="-1" showcontrols="1"ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>11.棕色播放器代码:<EMBED style="FILTER: invert()" src=链接地址width=300 height=45 loop="-1" autostart="true"></EMBED>12.带边框背景的播放器代码:<TABLE borderColor=#4F3256 background=背景图片地址 border=1><TBODY><TR><TD style="FILTER: alpha(opacity=50,style=3)"> <P align=center><EMBED src=音乐网址width=300 height=25 type=audio/mpeg loop="-1" autostart="false" volume="0"></P></TD></TR></TBODY></TABLE>13.带背景图片的播放器代码:<TABLE borderColor=navy background=图片地址border=0><TBODY><TR><TD style="FILTER: alpha(opacity=80,style=3)"><P align=center><EMBED src=音乐网址width=300 height=45type=audio/mpeg loop="-1" autostart="1" volume="0"></P></TD></TR></TBODY></TABLE>12 13综合属性分析background=图片地址可以更换图片地址来实现改变播放器背景14.黄色闪光播放器代码:<TABLE style="BORDER-RIGHT: #000000 3px dashed; BORDER-TOP: #000000 3px dashed; BORDER-LEFT: #000000 3px dashed; BORDER-BOTTOM: #000000 3px dashed" cellSpacing=0cellPadding=0 bgColor=#00000><TBODY><TR><TD><TABLE borderColor=navybackground=/s-helpSite/domName/nxm/20041114123131568.gif border=0><TBODY><TR><TD style="FILTER: alpha(opacity=50,style=3)"> <P align=center><EMBED src=音乐网址width=400 height=35 type=audio/mpeg loop="-1" autostart="0" loop="-1"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>15.蓝色闪光播放器代码:<TABLE borderColor=#dee4fe cellSpacing=3 cellPadding=0 background=/UploadFile/2004-12/2004123023 101352.gif border=2><TBODY><TR><TD><TABLE align=centerborder=0><TBODY><TR><TD style="FILTER: alpha(opacity=60,style=3)"> <P align=center><EMBED style="FILTER: Gray" src=音乐网址width=400 height=35 type=audio/mpeg volume="0" autostart="false"loop="-1"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>16.带花边的播放器代码:<TABLE style="BORDER-RIGHT: #000000 3px dashed; BORDER-TOP: #000000 3px dashed; BORDER-LEFT: #000000 3px dashed; BORDER-BOTTOM: #000000 3px dashed" cellSpacing=0cellPadding=0 bgColor=#00000><TBODY><TR><TD><TABLE borderColor=#000000 align=center border=1><TBODY><TR><TD><P align=center><EMBED style="FILTER: Xray" src=音乐网址width=400 height=35 type=audio/mpeg volume="0" autostart="false"loop="-0"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>17.粉色花边播放器代码:<TABLE style="BORDER-RIGHT: #ff69b4 3px dotted; BORDER-TOP: #ff69b4 3px dotted; BORDER-LEFT: #ff69b4 3px dotted;BORDER-BOTTOM: #ff69b4 3px dotted" cellSpacing=0cellPadding=0 align=center bgColor=white><TBODY><TR><TD><TABLE borderColor=#ff69b4 align=center bgColor=#ffccf5border=2><TBODY><TR><TD style="FILTER: alpha(opacity=100,style=3)"> <P align=center><EMBED src=音乐网址width=300 height=25 type=audio/mpeg volume="0" autostart="false" loop="-0"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>18.显示文件标签灰色播放器代码:<DIV><EMBED style="FILTER: Gray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>19显示文件标签棕色播放器代码:<DIV><EMBED style="FILTER: invert()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>20.显示文件标签黑色播放器代码:<DIV><EMBED style="FILTER: xray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>21.连放播放器代码:<EMBED style="FILTER: Gray()" src=音乐网址width=500 height=35 type=audio/x-ms-wma controls="StatusBar,TACCtrl,ControlPanel"border="0" autostart="1" playcount="0" showtracker="1"volume="0"></EMBED>22.彩色播放器代码:<TABLE style="FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: 00CCFF; FONT-STYLE: normal; FONT-FAMILY: Tahoma, Verdana; FONT-VARIANT: normal" cellSpacing=0 cellPadding=0 width=140border=0><TBODY><TR><TD style="BACKGROUND-COLOR:00CCFF"><EMBED style="FILTER: invert alpha(opacity=50)WIDTH: 140px; HEIGHT: 45px" src=音乐链接地址type=video/x-ms-asf autostart="FALSE" loop="-1"volume="0"></EMBED></TD></TR></TBODY></TABLE>本代码属性分析BACKGROUND-COLOR: 00CCFF播放器颜色代码可以更换以变换播放器颜色23.透明播放器代码代码:<TABLE style="FILTER: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)xray(); WIDTH:200px; HEIGHT: 40px"><TBODY><TR><TD><EMBED style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid" src=音乐链接地址width=200 height=30 type=audio/x-mplayer2 loop="-1" autostart="0" volume="0"EnableContextMenu="0" showstatusbar="0"console="video"></TD></TR></TBODY></TABLE>。

Android视频播放器代码

Android视频播放器代码

Java代码部分:import java.io.IOException;import java.util.Random;import android.app.Activity;import android.content.Context;import NotFoundException;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.os.Handler;import android.view.GestureDetector.OnGestureListener;import android.view.Gravity;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.ImageButton;import android.widget.LinearLayout;import youtParams;import android.widget.PopupWindow;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;import android.widget.Toast;public class PlayVideo extends Activity implementsOnGestureListener,OnClickListener,// 监听OnBufferingUpdateListener,// 当网络缓冲数据流变化的时候唤起的播放事件OnCompletionListener,// 当媒体资源在播放的时候到达终点时唤起的播放事件MediaPlayer.OnPreparedListener,SurfaceHolder.Callback// 回调函数{// 视频高和宽int videoWidth;int videoHeight;// 按钮ImageButton play;//定义快进按钮ImageButton fastPlay;//定义快退按钮ImageButton fastBack;// 控制栏LinearLayout layout_control; LinearLayout layout_prograss; LinearLayout videoBack;// 用来播放媒体MediaPlayer mediaPlayer; // 显示媒体SurfaceView surView;// 用来控制SurfaceView SurfaceHolder surHolder;// 路径String path;// 是否是播放状态boolean boTing = true;//获取播放的位置int num;//点击屏幕次数int count;//第一次点击int firClick;//第二次点击int secClick;//通过flag判断是否全屏boolean flag;//播放进度条SeekBar seekbar;//显示时间组建TextView showTime;//播放文件的时间int minute;int second;//进度条进度int progress;//线程控制MyThread mt;//声音控制SeekBar sound;//声音进度int soundId;//显示音量TextView showSound;//接取拖动进度条int videoLength;boolean f = true;//播放尺寸//按钮隐藏时间int hint = 5000;//用于接取点击ListView位置int position;//声称随机数Random random;//通过buttonFlag判断按钮背景boolean buttonFlag = true;//显示视频总时间TextView allTime;TextView distant;PopupWindow popuWindow;View view;boolean popFlag ;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);setContentView(yout.video);// 产生对象view = this.getLayoutInflater().inflate(yout.popuwindow, null);//得到布局的IDvideoBack = (LinearLayout)view.findViewById(R.id.videoback);// 产生对象play = (ImageButton) view.findViewById(R.id.video_bu_bofang);layout_control = (LinearLayout)findViewById(yout_control);layout_prograss= (LinearLayout)findViewById(yout_prograss);seekbar = (SeekBar)view.findViewById(R.id.seekbar);showTime = (TextView)view.findViewById(R.id.showtime);fastPlay = (ImageButton)view.findViewById(R.id.fastplay);fastBack = (ImageButton)view.findViewById(R.id.fastback);sound = (SeekBar)view.findViewById(R.id.sound);showSound = (TextView)view.findViewById(R.id.showsound);surView = (SurfaceView) findViewById(R.id.surfaceview_1);allTime = (TextView)view.findViewById(R.id.alltime);distant = (TextView)findViewById(R.id.distant);surHolder = surView.getHolder();popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);// 设置回调函数surHolder.addCallback(this);// 设置风格surHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//bu_boFang.setVisibility(View.INVISIBLE);// 设置按键监听play.setOnClickListener(this);//快进监听fastPlay.setOnClickListener(this);//快退按钮监听fastBack.setOnClickListener(this);//new随机数对象random = new Random();//接取到播放列表中点击的位置position = VideoList.position;try {//获取ShareActivity上下文VideoList.context = createPackageContext(".iotek", Context.CONTEXT_IGNORE_SECURITY);VideoList.share = VideoList.context.getSharedPreferences("setupadapter", VideoList.context.MODE_WORLD_READABLE);VideoList.editor = VideoList.share.edit();} catch (NameNotFoundException e) {e.printStackTrace();}//对读取的信息进行判断if (VideoList.share.getString("hinttime", "5秒").equals("5秒")) {hint = 5000;}if (VideoList.share.getString("hinttime", "5秒").equals("10秒")) {hint = 10000;}if (VideoList.share.getString("hinttime", "5秒").equals("15秒")) {hint = 15000;}//设置全屏播放surView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub// handler.sendEmptyMessageAtTime(0x11, 3000);if(MotionEvent.ACTION_DOWN == event.getAction()){count++;if(count == 1){new countClear().start();firClick = (int) System.currentTimeMillis();if (!popFlag) {// // // popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}//设置layout显示// if (!flag) {/* layout_control.setVisibility(View.VISIBLE);layout_prograss.setVisibility(View.VISIBLE);*///点击surfaceView延时3S发送信息/* handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);*/// }} else if (count == 2){secClick = (int) System.currentTimeMillis();if(secClick - firClick < 1000){flag = !flag;count = 0;}if(flag){distant.setHeight(0);surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));surHolder.setFixedSize(480, 760);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}// 开始播放// mePlayer.start();}else{if (VideoList.share.getString("size", "4:3").equals("4:3")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 360));surHolder.setFixedSize(480, 360);distant.setHeight(250);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view,Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}if (VideoList.share.getString("size", "4:3").equals("16:9")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 270));surHolder.setFixedSize(480, 270);distant.setHeight(250);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view,Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}}count = 0;firClick = 0;secClick = 0;}}return true;}});//监听进度条进度seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {videoLength = seekBar.getProgress();// int q = mediaPlayer.getCurrentPosition();mediaPlayer.seekTo(videoLength);//获取进度条当前的位置// int dest = seekBar.getProgress();//设置播放器当期的播放位置// mediaPlayer.seekTo(num);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//得到seekbar的进度/* seekbar.setProgress(progress);videoLength = seekBar.getProgress();*/}});sound.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stubint i= seekBar.getProgress();mediaPlayer.setVolume(i/100f,i/100f);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stubint i= sound.getProgress();showSound.setText("音量:"+i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}});}private void playVideo(){// 构建MediaPlayer对象mediaPlayer = new MediaPlayer();try {// 设置媒体文件路径mediaPlayer.setDataSource(VideoList.path);// 设置通过SurfaceView来显示画面mediaPlayer.setDisplay(surHolder);// 准备mediaPlayer.prepare();distant.setHeight(200);// 设置事件监听mediaPlayer.setOnBufferingUpdateListener(this);mediaPlayer.setOnCompletionListener(this);mediaPlayer.setOnPreparedListener(this);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);seekbar.setMax(mediaPlayer.getDuration());//设置当前播放音量最大soundId = sound.getProgress();mediaPlayer.setVolume(soundId, soundId);showSound.setText("音量:"+soundId);mt = new MyThread();mt.start();handler.sendEmptyMessage(0x13);int n = mediaPlayer.getDuration();//获得持续时间seekbar.setMax(n);n = n/1000;int m = n/60;int h = m/60;int s = n%60;m = m%60;allTime.setText(String.format("影片长度:"+"%02d:%02d:%02d", h,m,s));} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// MediaPlayer.OnPreparedListenerpublic void onCompletion(MediaPlayer mp) {handler.sendEmptyMessage(0x14);}// MediaPlayer.OnPreparedListener// 这时能确保player处于Prepared状态,触发start是最合适的public void onPrepared(MediaPlayer mp) {if (VideoList.share.getString("size", "4:3").equals("4:3")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 360));// 设置播放视频的宽度和高度surHolder.setFixedSize(480, 360);// 开始播放mediaPlayer.start();}if (VideoList.share.getString("size", "4:3").equals("16:9")) {// 设置播放视频的宽度和高度surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 270));surHolder.setFixedSize(480, 270);// 开始播放mediaPlayer.start();}}public void surfaceCreated(SurfaceHolder holder) {playVideo();}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}protected void onDestroy(){super.onDestroy();if (mediaPlayer != null){mediaPlayer.release();mediaPlayer = null;//关闭cursor// VideoList.cursor.close();//关闭数据库// VideoList.db.close();//改变线程循环条件f = false;handler.removeMessages(0x11);popuWindow.dismiss();}}public void onClick(View v) {if(v==play){//如果正在播放if (buttonFlag) {play.setImageResource(R.drawable.pause_1);mediaPlayer.pause();buttonFlag = false;}else{play.setImageResource(R.drawable.play_1);mediaPlayer.start();buttonFlag = true;}handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}if (v == fastPlay) {int i = mediaPlayer.getCurrentPosition()+5000;mediaPlayer.seekTo(i);seekbar.setProgress(i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}if (v == fastBack) {int i = mediaPlayer.getCurrentPosition()-5000;mediaPlayer.seekTo(i);seekbar.setProgress(i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {if (msg.what == 0x11) {if(popuWindow.isShowing()&&f){popuWindow.dismiss();popFlag = false;}////启动后设置layout隐藏/* layout_control.setVisibility(View.INVISIBLE);layout_prograss.setVisibility(View.INVISIBLE);*/}if (msg.what == 0x12) {if(mediaPlayer!=null){num = mediaPlayer.getCurrentPosition();}seekbar.setProgress(num);// 为时分秒赋值num = num/1000;int minute = num/60;int hour = minute/60;int second = num%60;minute = minute%60;/* if (mediaPlayer!=null) {seekbar.setProgress(mediaPlayer.getCurrentPosition());}*/showTime.setText(String.format("播放进度:"+"%02d:%02d:%02d", hour,minute,second));// handler.sendEmptyMessage(0x12);}if (msg.what == 0x14) {if (VideoList.share.getString("playstyle","顺序播放").equals("单曲循环")) {//释放播放的视频mediaPlayer.release();//游标移动到点击ListView位置// VideoList.cursor.moveToPosition(VideoList.position);//在数据库中取出ListView点击的路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}if (VideoList.share.getString("playstyle", "顺序播放").equals("顺序播放")) { //释放当前的MediaPlayermediaPlayer.release();//自加position ++;if (position==VideoList.videoList.getCount()) {position = 0;}//游标向下移动VideoList.cursor.moveToPosition(position);//取出移动后的视频路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}if (VideoList.share.getString("playstyle", "顺序播放").equals("随机播放")) { //释放播放的视频mediaPlayer.release();int r = random.nextInt(VideoList.videoList.getCount()-1);VideoList.cursor.moveToPosition(r);//在数据库中取出ListView点击的路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}}};};class MyThread extends Thread{@Overridepublic void run() {handler.sendEmptyMessageDelayed(0x11, hint);// if (mePlayer.getDuration()+"".equals("0") ) {while (f) {try {sleep(1000);handler.sendEmptyMessage(0x12);}catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// }}}class countClear extends Thread{@Overridepublic void run() {try {sleep(1000);//睡一秒后count清0count = 0;} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub}@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) { // TODO Auto-generated method stub}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}}配置文件:Video.xml文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/videoback"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#00000000"android:id="@+id/distant"/><SurfaceViewandroid:id="@+id/surfaceview_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="300px"android:layout_gravity="center_horizontal" /></LinearLayout>Popuwindow.xml配置文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/videoback"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/layout_prograss"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:orientation="vertical" ><SeekBarandroid:id="@+id/seekbar"android:layout_width="match_parent"android:layout_height="8px"android:progressDrawable="@drawable/seekbar"android:thumb="@drawable/seekbutton"android:progress="0" /><TextViewandroid:id="@+id/showtime"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/alltime"android:layout_width="match_parent"android:layout_height="wrap_content"/><SeekBarandroid:id="@+id/sound"android:layout_height="8px"android:progressDrawable="@drawable/seekbar"android:thumb="@drawable/seekbutton"android:progress="50" /><TextViewandroid:id="@+id/showsound"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/layout_control"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/fastback"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/stepback" /><ImageButtonandroid:id="@+id/video_bu_bofang"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/play_1" /><ImageButtonandroid:id="@+id/fastplay"android:layout_width="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/stepfor" /> </LinearLayout></LinearLayout>。

FLASH视频播放器代码

FLASH视频播放器代码

<P align=center><OBJECTcodeBase="/pub/shockwave/cabs/flash/swflash.cab#version=10, 0,32,18" classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=485 align=middle height=370><PARAM NAME="_cx" V ALUE="12832"><PARAM NAME="_cy" V ALUE="9789"><PARAM NAME="FlashVars" V ALUE=""><PARAM NAME="Movie" V ALUE="/images/sp_player.swf?vcastr_file=/Files/adminfiles/ywy/2011/11-4/10/2011110410261 287598.flv&amp;IsAutoPlay=1"><PARAM NAME="Src" V ALUE="/images/sp_player.swf?vcastr_file=/Files/adminfiles/ywy/2011/11-4/10/2011110410261 287598.flv&amp;IsAutoPlay=1"><PARAM NAME="WMode" V ALUE="Window"><PARAM NAME="Play" V ALUE="0"><PARAM NAME="Loop" V ALUE="-1"><PARAM NAME="Quality" V ALUE="High"><PARAM NAME="SAlign" V ALUE="LT"><PARAM NAME="Menu" V ALUE="0"><PARAM NAME="Base" V ALUE=""><PARAM NAME="AllowScriptAccess" V ALUE=""><PARAM NAME="Scale" V ALUE="NoScale"><PARAM NAME="DeviceFont" V ALUE="0"><PARAM NAME="EmbedMovie" V ALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" V ALUE=""><PARAM NAME="MovieData" V ALUE=""><PARAM NAME="SeamlessTabbing" V ALUE="1"><PARAM NAME="Profile" V ALUE="0"><PARAM NAME="ProfileAddress" V ALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" V ALUE="all"><PARAM NAME="AllowFullScreen" V ALUE="true"></OBJECT><BR><FONT style="FONT-SIZE: 10px" color=#808080>(如无法播放或加载缓慢建议升级FLASH最高版本<A href="http://211.98.168.146:9203/18D311600D889F1A00A0B1DFAAA8170ADF3BA8548503C 290//get/flashplayer/current/install_flash_player_ax.exe" target=_blank>点击下载</A>)</FONT></P>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SoundView.java
package com.zh_weir.videoplayer;
import com.zh_weir.videoplayer.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.media.AudioManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class SoundView extends View{
public final static String TAG = "SoundView";
private Context mContext;
private Bitmap bm , bm1;
private int bitmapWidth , bitmapHeight;
private int index;
private OnVolumeChangedListener mOnVolumeChangedListener;
private final static int HEIGHT = 11;
public final static int MY_HEIGHT = 163;
public final static int MY_WIDTH = 44;
public interface OnVolumeChangedListener{
public void setYourVolume(int index);
}
public void setOnVolumeChangeListener(OnVolumeChangedListener l){ mOnVolumeChangedListener = l;
}
public SoundView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
public SoundView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
public SoundView(Context context) {
super(context);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
private void init(){
bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.sound_line);
bm1 = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.sound_line1);
bitmapWidth = bm.getWidth();
bitmapHeight = bm.getHeight();
//setIndex(5);
AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
setIndex(am.getStreamVolume(AudioManager.STREAM_MUSIC));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int y = (int) event.getY();
int n = y * 15 / MY_HEIGHT;
setIndex(15-n);
Log.d(TAG, "setIndex: "+(15-n));
return true;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
int reverseIndex = 15 - index;
for(int i = 0;i!=reverseIndex;++i){
canvas.drawBitmap(bm1, new Rect(0,0,bitmapWidth,bitmapHeight),
new Rect(0,i*HEIGHT,bitmapWidth,i*HEIGHT+bitmapHeight), null);
}
for(int i = reverseIndex;i!=15;++i){
canvas.drawBitmap(bm, new Rect(0,0,bitmapWidth,bitmapHeight),
new Rect(0,i*HEIGHT,bitmapWidth,i*HEIGHT+bitmapHeight), null);
}
super.onDraw(canvas);
}
private void setIndex(int n){
if(n>15){
n = 15;
}
else if(n<0){
n = 0;
}
if(index!=n){
index = n;
if(mOnVolumeChangedListener!=null){
mOnVolumeChangedListener.setYourVolume(n);
}
}
invalidate();
}
}。

相关文档
最新文档