实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
package com.zh_weir.videoplayer;
import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.LinkedList;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import com.admob.android.ads.AdView;
import com.zh_weir.videoplayer.SoundView.OnVolumeChangedListener;
import com.zh_weir.videoplayer.VideoView.MySizeChangeLinstener;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue.IdleHandler;
import android.provider.MediaStore;
import android.text.AndroidCharacter;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AnalogClock;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
public class VideoPlayerActivity extends Activity {
private final static String TAG = "VideoPlayerActivity";
private boolean isOnline = false;
private boolean isChangedVideo = false;
public static LinkedList<MovieInfo> playList = new LinkedList<MovieInfo>();
public class MovieInfo{
String displayName;
String path;
}
private Uri videoListUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
private static int position ;
private static boolean backFromAD = false;
private int playedTime;
private AdView adView;
private VideoView vv = null;
private SeekBar seekBar = null;
private TextView durationTextView = null;
private TextView playedTextView = null;
private GestureDetector mGestureDetector = null;
private AudioManager mAudioManager = null;
private int maxVolume = 0;
private int currentVolume = 0;
private ImageButton bn1 = null;
private ImageButton bn2 = null;
private ImageButton bn3 = null;
private ImageButton bn4 = null;
private ImageButton bn5 = null;
private View controlView = null;
private PopupWindow controler = null;
private SoundView mSoundView = null;
private PopupWindow mSoundWindow = null;
private View extralView = null;
private PopupWindow extralWindow = null;
private static int screenWidth = 0;
private static int screenHeight = 0;
private static int controlHeight = 0;
private final static int TIME = 6868;
private boolean isControllerShow = true;
private boolean isPaused = false;
private boolean isFullScreen = false;
private boolean isSilent = false;
private boolean isSoundShow = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("OnCreate", getIntent().toString());
Looper.myQueue().addIdleHandler(new IdleHandler(){
@Override
public boolean queueIdle() {
// TODO Auto-generated method stub
if(controler != null && vv.isShown()){
controler.showAtLocation(vv, Gravity.BOTTOM, 0, 0);
//controler.update(screenWidth, controlHeight);
controler.update(0, 0, screenWidth, controlHeight);
}
if(extralWindow != null && vv.isShown()){
extralWindow.showAtLocation(vv,Gravity.TOP,0, 0);
extralWindow.update(0, 25, screenWidth, 60);
}
//myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);
return false;
}
});
controlView = getLayoutInflater().inflate(R.layout.controler, null);
controler = new PopupWindow(controlView);
durationTextView = (TextView) controlView.findViewById(R.id.duration);
playedTextView = (TextView) controlView.findViewById(R.id.has_played);
mSoundView = new SoundView(this);
mSoundView.setOnVolumeChangeListener(new OnVolumeChangedListener(){
@Override
public void setYourVolume(int index) {
cancelDelayHide();
updateVolume(index);
hideControllerDelay();
}
});
mSoundWindow = new PopupWindow(mSoundView);
extralView = getLayoutInflater().inflate(R.layout.extral, null);
extralWindow = new PopupWindow(extralView);
ImageButton backButton = (ImageButton) extralView.findViewById(R.id.back);
ImageButton aboutButton = (ImageButton) extralView.findViewById(R.id.about);
position = -1;
backButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
VideoPlayerActivity.this.finish();
}
});
aboutButton.setOnClickListener(new OnClickListener(){
Dialog dialog;
OnClickListener mClickListener = new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("DIALOG", "DISMISS");
dialog.dismiss();
//vv.seekTo(msec);
vv.start();
}
};
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*Intent intent = new Intent();
intent.setClass(VideoPlayerActivity.this, VideoChooseActivity.class);
VideoPlayerActivity.this.startActivityForResult(intent, 0);*/
dialog = new Dialog(VideoPlayerActivity.this, R.style.transDialog);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
View view = VideoPlayerActivity.this.getLayoutInflater().inflate(R.layout.about, null);
dialog.setContentView(view);
view.findViewById(R.id.cancel).setOnClickListener(mClickListener);
vv.pause();
dialog.show();
cancelDelayHide();
}
});
bn1 = (ImageButton) controlView.findViewById(R.id.button1);
bn2 = (ImageButton) controlView.findViewById(R.id.button2);
bn3 = (ImageButton) controlView.findViewById(R.id.button3);
bn4 = (ImageButton) controlView.findViewById(R.id.button4);
bn5 = (ImageButton) controlView.findViewById(R.id.button5);
vv = (VideoView) findViewById(R.id.vv);
vv.setOnErrorListener(new OnErrorListener(){
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
vv.stopPlayback();
isOnline = false;
new AlertDialog.Builder(VideoPlayerActivity.this)
.setTitle("对不起")
.setMessage("您所播的视频格式不正确,播放已停止。")
.setPositiveButton("知道了",
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
vv.stopPlayback();
}
})
.setCancelable(false)
.show();
return false;
}
});
Uri uri = getIntent().getData();
if(uri!=null){
vv.stopPlayback();
vv.setVideoURI(uri);
isOnline = true;
bn3.setImageResource(R.drawable.pause);
}else{
bn3.setImageResource(R.drawable.play);
}
getVideoFile(playList, new File("/sdcard/"));
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
Cursor cursor = getContentResolver().query(videoListUri, new String[]{"_display_name","_data"}, null, null, null);
int n = cursor.getCount();
cursor.moveToFirst();
LinkedList<MovieInfo> playList2 = new LinkedList<MovieInfo>();
for(int i = 0 ; i != n ; i){
MovieInfo mInfo = new MovieInfo();
mInfo.displayName = cursor.getString(cursor.getColumnIndex("_display_name"));
mInfo.path = cursor.getString(cursor.getColumnIndex("_data"));
playList2.add(mInfo);
cursor.moveToNext();
}
if(playList2.size() > playList.size()){
playList = playList2;
}
}
vv.setMySizeChangeLinstener(new MySizeChangeLinstener(){
@Override
public void doMyThings() {
// TODO Auto-generated method stub
setVideoScale(SCREEN_DEFAULT);
}
});
bn1.setAlpha(0xBB);
bn2.setAlpha(0xBB);
bn3.setAlpha(0xBB);
bn4.setAlpha(0xBB);
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
bn5.setAlpha(findAlphaFromSound());
bn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(VideoPlayerActivity.this, VideoChooseActivity.class);
VideoPlayerActivity.this.startActivityForResult(intent, 0);
cancelDelayHide();
}
});
bn4.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int n = playList.size();
isOnline = false;
if( position < n){
vv.setVideoPath(playList.get(position).path);
cancelDelayHide();
hideControllerDelay();
}else{
VideoPlayerActivity.this.finish();
}
}
});
bn3.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cancelDelayHide();
if(isPaused){
vv.start();
bn3.setImageResource(R.drawable.pause);
hideControllerDelay();
}else{
vv.pause();
bn3.setImageResource(R.drawable.play);
}
isPaused = !isPaused;
}
});
bn2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
isOnline = false;
if(--position>=0){
vv.setVideoPath(playList.get(position).path);
cancelDelayHide();
hideControllerDelay();
}else{
VideoPlayerActivity.this.finish();
}
}
});
bn5.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cancelDelayHide();
if(isSoundShow){
mSoundWindow.dismiss();
}else{
if(mSoundWindow.isShowing()){
mSoundWindow.update(15,0,SoundView.MY_WIDTH,SoundView.MY_HEIGHT);
}else{
mSoundWindow.showAtLocation(vv, Gravity.RIGHT|Gravity.CENTER_VERTICAL, 15, 0);
mSoundWindow.update(15,0,SoundView.MY_WIDTH,SoundView.MY_HEIGHT);
}
}
isSoundShow = !isSoundShow;
hideControllerDelay();
}
});
bn5.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
if(isSilent){
bn5.setImageResource(R.drawable.soundenable);
}else{
bn5.setImageResource(R.drawable.sounddisable);
}
isSilent = !isSilent;
updateVolume(currentVolume);
cancelDelayHide();
hideControllerDelay();
return true;
}
});
seekBar = (SeekBar) controlView.findViewById(R.id.seekbar);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
if(fromUser){
if(!isOnline){
vv.seekTo(progress);
}
}
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
myHandler.removeMessages(HIDE_CONTROLER);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);
}
});
getScreenSize();
mGestureDetector = new GestureDetector(new SimpleOnGestureListener(){
@Override
public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
if(isFullScreen){
setVideoScale(SCREEN_DEFAULT);
}else{
setVideoScale(SCREEN_FULL);
}
isFullScreen = !isFullScreen;
Log.d(TAG, "onDoubleTap");
if(isControllerShow){
showController();
}
//return super.onDoubleTap(e);
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
if(!isControllerShow){
showController();
hideControllerDelay();
}else {
cancelDelayHide();
hideController();
}
//return super.onSingleTapConfirmed(e);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
if(isPaused){
vv.start();
bn3.setImageResource(R.drawable.pause);
cancelDelayHide();
hideControllerDelay();
}else{
vv.pause();
bn3.setImageResource(R.drawable.play);
cancelDelayHide();
showController();
}
isPaused = !isPaused;
//super.onLongPress(e);
}
});
// vv.setVideoPath("http://202.108.16.171/cctv/video/A7/E8/69/27/A7E86927D2BF4D2FA63471D1C5F97D36/gphone/480_320/200/0.mp4");
vv.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer arg0) {
// TODO Auto-generated method stub
setVideoScale(SCREEN_DEFAULT);
isFullScreen = false;
if(isControllerShow){
showController();
}
int i = vv.getDuration();
Log.d("onCompletion", "" i);
seekBar.setMax(i);
i/=1000;
int minute = i/60;
int hour = minute/60;
int second = i%60;
minute %= 60;
durationTextView.setText(String.format("%02d:%02d:%02d", hour,minute,second));
/*controler.showAtLocation(vv, Gravity.BOTTOM, 0, 0);
controler.update(screenWidth, controlHeight);
myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);*/
vv.start();
bn3.setImageResource(R.drawable.pause);
hideControllerDelay();
myHandler.sendEmptyMessage(PROGRESS_CHANGED);
}
});
vv.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
int n = playList.size();
isOnline = false;
if( position < n){
vv.setVideoPath(playList.get(position).path);
}else{
vv.stopPlayback();
VideoPlayerActivity.this.finish();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode==0&&resultCode==Activity.RESULT_OK){
vv.stopPlayback();
int result = data.getIntExtra("CHOOSE", -1);
Log.d("RESULT", "" result);
if(result!=-1){
isOnline = false;
isChangedVideo = true;
vv.setVideoPath(playList.get(result).path);
position = result;
}else{
String url = data.getStringExtra("CHOOSE_URL");
if(url != null){
vv.setVideoPath(url);
isOnline = true;
isChangedVideo = true;
}
}
return ;
}
super.onActivityResult(requestCode, resultCode, data);
}
private final static int PROGRESS_CHANGED = 0;
private final static int HIDE_CONTROLER = 1;
Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case PROGRESS_CHANGED:
int i = vv.getCurrentPosition();
seekBar.setProgress(i);
if(isOnline){
int j = vv.getBufferPercentage();
seekBar.setSecondaryProgress(j * seekBar.getMax() / 100);
}else{
seekBar.setSecondaryProgress(0);
}
i/=1000;
int minute = i/60;
int hour = minute/60;
int second = i%60;
minute %= 60;
playedTextView.setText(String.format("%02d:%02d:%02d", hour,minute,second));
sendEmptyMessageDelayed(PROGRESS_CHANGED, 100);
break;
case HIDE_CONTROLER:
hideController();
break;
}
super.handleMessage(msg);
}
};
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
boolean result = mGestureDetector.onTouchEvent(event);
if(!result){
if(event.getAction()==MotionEvent.ACTION_UP){
/*if(!isControllerShow){
showController();
hideControllerDelay();
}else {
cancelDelayHide();
hideController();
}*/
}
result = super.onTouchEvent(event);
}
return result;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
getScreenSize();
if(isControllerShow){
cancelDelayHide();
hideController();
showController();
hideControllerDelay();
}
super.onConfigurationChanged(newConfig);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
playedTime = vv.getCurrentPosition();
vv.pause();
bn3.setImageResource(R.drawable.play);
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if(!isChangedVideo){
vv.seekTo(playedTime);
vv.start();
}else{
isChangedVideo = false;
}
//if(vv.getVideoHeight()!=0){
if(vv.isPlaying()){
bn3.setImageResource(R.drawable.pause);
hideControllerDelay();
}
Log.d("REQUEST", "NEW AD !");
adView.requestFreshAd();
if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
super.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
if(controler.isShowing()){
controler.dismiss();
extralWindow.dismiss();
}
if(mSoundWindow.isShowing()){
mSoundWindow.dismiss();
}
myHandler.removeMessages(PROGRESS_CHANGED);
myHandler.removeMessages(HIDE_CONTROLER);
if(vv.isPlaying()){
vv.stopPlayback();
}
playList.clear();
super.onDestroy();
}
private void getScreenSize()
{
Display display = getWindowManager().getDefaultDisplay();
screenHeight = display.getHeight();
screenWidth = display.getWidth();
controlHeight = screenHeight/4;
adView = (AdView) extralView.findViewById(R.id.ad);
LayoutParams lp = adView.getLayoutParams();
lp.width = screenWidth*3/5;
}
private void hideController(){
if(controler.isShowing()){
controler.update(0,0,0, 0);
extralWindow.update(0,0,screenWidth,0);
isControllerShow = false;
}
if(mSoundWindow.isShowing()){
mSoundWindow.dismiss();
isSoundShow = false;
}
}
private void hideControllerDelay(){
myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);
}
private void showController(){
controler.update(0,0,screenWidth, controlHeight);
if(isFullScreen){
extralWindow.update(0,0,screenWidth, 60);
}else{
extralWindow.update(0,25,screenWidth, 60);
}
isControllerShow = true;
}
private void cancelDelayHide(){
myHandler.removeMessages(HIDE_CONTROLER);
}
private final static int SCREEN_FULL = 0;
private final static int SCREEN_DEFAULT = 1;
private void setVideoScale(int flag){
LayoutParams lp = vv.getLayoutParams();
switch(flag){
case SCREEN_FULL:
Log.d(TAG, "screenWidth: " screenWidth " screenHeight: " screenHeight);
vv.setVideoScale(screenWidth, screenHeight);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
break;
case SCREEN_DEFAULT:
int videoWidth = vv.getVideoWidth();
int videoHeight = vv.getVideoHeight();
int mWidth = screenWidth;
int mHeight = screenHeight - 25;
if (videoWidth > 0 && videoHeight > 0) {
if ( videoWidth * mHeight > mWidth * videoHeight ) {
//Log.i("@@@", "image too tall, correcting");
mHeight = mWidth * videoHeight / videoWidth;
} else if ( videoWidth * mHeight < mWidth * videoHeight ) {
//Log.i("@@@", "image too wide, correcting");
mWidth = mHeight * videoWidth / videoHeight;
} else {
}
}
vv.setVideoScale(mWidth, mHeight);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
break;
}
}
private int findAlphaFromSound(){
if(mAudioManager!=null){
//int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int alpha = currentVolume * (0xCC-0x55) / maxVolume 0x55;
return alpha;
}else{
return 0xCC;
}
}
private void updateVolume(int index){
if(mAudioManager!=null){
if(isSilent){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
}else{
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);
}
currentVolume = index;
bn5.setAlpha(findAlphaFromSound());
}
}
private void getVideoFile(final LinkedList<MovieInfo> list,File file){
file.listFiles(new FileFilter(){
@Override
public boolean accept(File file) {
// TODO Auto-generated method stub
String name = file.getName();
int i = name.indexOf('.');
if(i != -1){
name = name.substring(i);
if(name.equalsIgnoreCase(".mp4")||name.equalsIgnoreCase(".3gp")){
MovieInfo mi = new MovieInfo();
mi.displayName = file.getName();
mi.path = file.getAbsolutePath();
list.add(mi);
return true;
}
}else if(file.isDirectory()){
getVideoFile(list, file);
}
return false;
}
});
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论