首页 新闻 会员 周边

Android 如何修改视频播放窗口大小?

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-03-13 09:59

在做项目中遇到一个问题。

我写了一个类继承surfaceview类来实现视频播放。在类中使用MediaPlayer来控制播放。然后在activity中来使用这个类。但是发现在屏幕上surfaceview的大小可以控制,但是视频窗口的大小却不能控制,请高手赐教,多谢!

问题补充:

代码如下:

 

 1 package com.test.ams.widget;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.Map;
6
7 import com.test.ams.player.Source;
8 import com.test.ams.utils.Constants;
9
10 import android.content.Context;
11 import android.graphics.Color;
12 import android.graphics.PixelFormat;
13 import android.media.AudioManager;
14 import android.media.MediaPlayer;
15 import android.media.MediaPlayer.OnCompletionListener;
16 import android.media.MediaPlayer.OnErrorListener;
17 import android.media.MediaPlayer.OnSeekCompleteListener;
18 import android.util.Log;
19 import android.view.SurfaceHolder;
20 import android.view.SurfaceHolder.Callback;
21 import android.view.SurfaceView;
22
23 /**
24 * 视频播放
25 * @package com.test.ams.widget
26 * @author Keynes Cao
27 * @create 2011-12-5 下午1:44:45 *
28 */
29 public class VideoSurfaceView extends SurfaceView implements Callback {
30
31 private SurfaceHolder mSurfaceHolder = null;
32 private MediaPlayer mMediaPlayer = null;
33
34 /**视频地址**/
35 private String source = null;
36
37 /**数据源**/
38 private List<Source> mList = null;
39
40 /**当前播放索引**/
41 private int currentItem = 0;
42
43 /**当前播放的次数**/
44 private int currFrequency = 0;
45
46 /**设定的播放次数**/
47 private int frequency = 0;
48
49 private boolean loop = true;
50
51 public VideoSurfaceView(Context context,List<Source>mList) {
52 super(context);
53 mSurfaceHolder = getHolder();
54 mSurfaceHolder.addCallback(this);
55
56 //缓存类型
57 mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
58
59 //播放的数据
60 this.mList = mList;
61 }
62 public VideoSurfaceView(Context context,List<Source>mList,boolean loop) {
63 this(context,mList);
64 this.loop = true;
65 }
66
67
68 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {}
69
70 public void surfaceCreated(SurfaceHolder arg0) {
71
72 mMediaPlayer = new MediaPlayer();//初使化播放对象
73 setVideoSource();//设置视频参数
74 if(source!=null && !"".equals(source)){
75 playVideo(source);//开始播放
76 }
77 }
78
79 public void surfaceDestroyed(SurfaceHolder arg0) {
80 stop();
81 }
82
83 /**
84 * 播放
85 */
86 private void playVideo(String path){
87 try{
88 //空置到空闲状态
89 mMediaPlayer.reset();
90
91 //设置播入文件地址
92 mMediaPlayer.setDataSource(path);
93
94 //设置播放显示的地方
95 mMediaPlayer.setDisplay(mSurfaceHolder);
96
97 //播放准备
98 mMediaPlayer.prepare();
99
100 //设置音乐流
101 mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
102
103 //窗口大小
104 mSurfaceHolder.setFixedSize(mMediaPlayer.getVideoWidth(),mMediaPlayer.getVideoHeight());
105 Log.d("W X H",mMediaPlayer.getVideoWidth()+" X "+mMediaPlayer.getVideoHeight());
106
107 //开始播放
108 mMediaPlayer.start();
109
110 //注册监听事件
111 mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
112 public void onCompletion(MediaPlayer arg0) {
113 //下一个
114 nextVideo();
115 }
116 });
117 mMediaPlayer.setOnErrorListener(new OnErrorListener() {
118 public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
119 //发生错误时恢复到空闲状态
120 mMediaPlayer.reset();
121 return false;
122 }
123 });
124 }catch(IOException ex){
125 Log.e("VideoSurfaceView",ex.getMessage()+"\n"+ex);
126 System.out.println(ex);
127 }
128 }
129
130 /**
131 *下一个视频
132 */
133 private void nextVideo(){
134 //如果已经播放的次数大于设定的播放次数,则播放下一内容
135 if(++currFrequency >= frequency){
136 //如果要播放的内容已经是最后一个则从头开始
137 if(++currentItem >= mList.size()){
138 currentItem = 0;
139 if(loop == false){
140 stop();
141 return;
142 }
143 }
144 Log.d("播放",""+currentItem +"内容");
145 setVideoSource();
146 }
147 //Log.d("播放次数:",""+currFrequency+"/"+frequency);
148 playVideo(source);
149 Log.d("播放次数:",""+currFrequency +"/"+frequency);
150 }
151
152 /**
153 * 设置要播放的视频
154 */
155 private void setVideoSource() {
156 //获取当前播放内容
157 Source source = mList.get(currentItem);
158 if(source != null){
159 //播放次数
160 if(null != source.getFrequency()){
161 setFrequency(source.getFrequency());
162 }
163 //文件
164 if(null!=source.getFileName() && !"".equals(source.getFileName())){
165 setSource(source.getFileName());
166 }
167 //播放次数恢复默认值
168 currFrequency = 0;
169 }
170 }
171 /**
172 * <see>停止播放</see>
173 */
174 public void stop(){
175 if(mMediaPlayer != null){
176 //停止播放
177 mMediaPlayer.stop();
178 //资源回收
179 mMediaPlayer.release();
180 mMediaPlayer = null;
181 }
182 }
183 private void draw(){
184
185 }
186 /**********************************set get method********************************************/
187
188 private void setFrequency(int frequency) {
189 this.frequency = frequency;
190 }
191
192 private void setSource(String source) {
193 this.source = source;
194 }
195 }

 

阳光天下的主页 阳光天下 | 初学一级 | 园豆:10
提问于:2011-12-16 21:48
< >
分享
所有回答(1)
0

贴下代码吧LZ

wusuopuBUPT | 园豆:35 (初学一级) | 2011-12-21 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册