Android之SurfaceView窗口/全屏播放

package com.FJICC.lzm;

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.app.AlertDialog;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;

public class multimedia_player2 extends Activity implements SurfaceHolder.Callback{

 
   private MediaPlayer mMediaPlayer01;
   private SurfaceView mSurfaceView01;
   private SurfaceHolder mSurfaceHolder01;
  

   private ImageButton mPlay;
   private ImageButton mPause;
   private ImageButton mReset;
   private ImageButton mStop;
  
   private boolean bIsPaused = false;
   private boolean bIsReleased = true;
   private boolean bIsReset = false;
   private String strVideoPath = "";
  
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.multimedia_player2);
  
  
  
  if(!checkSDCard())
     {
       /* 检测是否有SD卡*/
       mMakeTextToast
       (
         getResources().getText(R.string.str_err_nosd).toString(),
         true
       );
       };
      
      
       getWindow().setFormat(PixelFormat.UNKNOWN);
      
       /*获取用来显示视频SurfaceView */
       mSurfaceView01 = (SurfaceView) findViewById(R.id.surfaceView1);
      
      
      
       /* 获取SurfaceHolder控制 SurfaceView*/
       mSurfaceHolder01 = mSurfaceView01.getHolder();
       mSurfaceHolder01.addCallback(this);
      
       /*默认视频分辨率 176x144*/
       mSurfaceHolder01.setFixedSize(176,144);
       //设置.....
       mSurfaceHolder01.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      
       /*获取ImageButton的ID */
       mPlay = (ImageButton) findViewById(R.id.imageButton_start);
       mPause = (ImageButton) findViewById(R.id.imageButton_pause);
       mReset = (ImageButton) findViewById(R.id.imageButton_reset);
       mStop = (ImageButton) findViewById(R.id.imageButton_stop);
      
       mPlay.setEnabled(true);//初始状态 开启播放按钮,其他的设置为false
          mPause.setEnabled(false);
          mReset.setEnabled(false);
         
       /*测试用播放视频*/
 strVideoPath = "file:///sdcard/DCIM/test.mp4";
 
  mPlay.setOnClickListener(new ImageButton.OnClickListener()
     {
       public void onClick(View view)
       {
         /*启动Function */
         if(checkSDCard())
         {
          if(bIsReleased == true){
          showDialog(0);
          playVideo(strVideoPath);          
          }
          else if(bIsReset == true){
          // mMediaPlayer01.start();
           bIsReset = false;           
          }
          mPlay.setEnabled(false);
          mPause.setEnabled(true);
          mReset.setEnabled(true);
         }
       }
     });
    
     /*暂停 */
     mPause.setOnClickListener(new ImageButton.OnClickListener()
     {
       public void onClick(View view)
       {
         if(checkSDCard())
         {
           if (mMediaPlayer01 != null)
           {
             if(bIsReleased == false)
             {
               if(bIsPaused==false)
               {
                 mMediaPlayer01.pause();                
                 bIsPaused = true;
                 mMakeTextToast("pause",true);
                // mTextView01.setText(R.string.str_pause);
               }
               else if(bIsPaused==true)
               {
                 mMediaPlayer01.start();
                 bIsPaused = false;
                 mMakeTextToast("start",true);
                // mTextView01.setText(R.string.str_play);
               }
             }
           }
         }
       }
     });
    
     /*复位重播*/
     mReset.setOnClickListener(new ImageButton.OnClickListener()
     {
       public void onClick(View view)
       {
         if(checkSDCard())
         {
           if(bIsReleased == false)
           {
             if (mMediaPlayer01 != null)
             {
              
              mMediaPlayer01.seekTo(0);//回到录像原点
             //  如果是暂停状态回到原点,那么回到原点后还是暂停的,需要点击暂停键继续播放
              //如果是播放的时候,点击复位播放,那么复位后自动是自动播放的。
             }
           }
         }
       }
     });
    
     /*关闭播放*/
     mStop.setOnClickListener(new ImageButton.OnClickListener()
     {
       public void onClick(View view)
       {
         if(checkSDCard())
         {
           if (mMediaPlayer01 != null)
           {
             if(bIsReleased==false)
             {
               mMediaPlayer01.stop();
               mMediaPlayer01.release();
               bIsReleased = true;
            //  mMakeTextToast("["+mMediaPlayer01.toString()+"]",true);
              
               mPlay.setEnabled(true);//回到初始状态  :开启播放按钮,其他的设置为false
               mPause.setEnabled(false);
               mReset.setEnabled(false);
             }         
           }
          
         }
       }
     });
 } 
   /*播放视频函数*/
   private void playVideo(String strPath)
   {
  
    //DisplayMetircs 类可以很方便的获取分辨率     获取窗口的分辨率
    //这里获取窗口的大小
       DisplayMetrics metrics = new DisplayMetrics();
       getWindowManager().getDefaultDisplay().getMetrics(metrics);
      
     //设置Layout的参数 
     LayoutParams lp = mSurfaceView01.getLayoutParams();    
     lp.width = metrics.widthPixels/2;
     lp.height =metrics.heightPixels/2;
     mSurfaceView01.setLayoutParams(lp);
    
     mMediaPlayer01 = new MediaPlayer();
     mMediaPlayer01.setAudioStreamType(AudioManager.STREAM_MUSIC);
    
    
     /* */
     mMediaPlayer01.setDisplay(mSurfaceHolder01); 
    
     try
     {
       mMediaPlayer01.setDataSource(strPath);
     }
     catch (Exception e)
     {
       // TODO Auto-generated catch block
       mMakeTextToast("setDataSource Exceeption:"+e.toString(),true);
      //mTextView01.setText("setDataSource Exceeption:"+e.toString());
       e.printStackTrace();
     }
    
     try
     {
       mMediaPlayer01.prepare();
     }
     catch (Exception e)
     {
       // TODO Auto-generated catch block
      mMakeTextToast("setDataSource Exceeption:"+e.toString(),true);
      //mTextView01.setText("prepare Exceeption:"+e.toString());
       e.printStackTrace();
     }
    
     mMediaPlayer01.start();
     bIsReleased = false;
     //mTextView01.setText(R.string.str_play);    
     mMediaPlayer01.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
     {
       @Override
       public void onCompletion(MediaPlayer arg0)
       {
         // TODO Auto-generated method stub
        mMakeTextToast("stop",true); 
       //  mTextView01.setText(R.string.str_stop);
       
        bIsPaused = true;//视频播放完毕了,就自动回到了0位置,并停止了。点击停止/继续 即可播放。
       }
     });
   }

 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  
  //DisplayMetircs 类可以很方便的获取分辨率     获取窗口的分辨率
  //这里获取 窗口 的分辨率大小
       DisplayMetrics metrics = new DisplayMetrics();
       getWindowManager().getDefaultDisplay().getMetrics(metrics);
      
     //设置Layout的参数 
     LayoutParams lp = mSurfaceView01.getLayoutParams();    
     lp.width = metrics.widthPixels/2;
     lp.height =metrics.heightPixels/2;
     mSurfaceView01.setLayoutParams(lp);
 }
 
 

 @Override
 @Deprecated
 protected Dialog onCreateDialog(int id) {
  // TODO Auto-generated method stub
  
  final View v = View.inflate(this, R.layout.multimedia_set, null);
  final EditText videoPath = (EditText) v.findViewById(R.id.videoPath);
  switch(id){
  case 0:
  {
   Dialog dialog0 = new AlertDialog.Builder(this)
   .setTitle("播放文件")
   .setView(v).setMessage("请输入文件名:")
   .setPositiveButton("确定",
     new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface arg0, int arg1) {
       // 播放本地视频
             //视频文件放置在SD卡下的DCIM目录下,这里设置为默认路径
             //resetVideo();//重头播放,这个可以在播放完了后,执行,就可以实现循环播放了
       strVideoPath= "file:///sdcard/DCIM/"+videoPath.getText().toString();//此时只需输入文件名称如:test.3gp;
             setTitle("Playing" + strVideoPath);
      }
     }).create();
   return dialog0;
  }
  default:
   return null;
   
  }

 }
 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  
 }
 
 private boolean checkSDCard()
   {
     /* */
     if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
     {
       return true;
     }
     else
     {
       return false;
     }
   }
  
   public void mMakeTextToast(String str, boolean isLong)
   {
     if(isLong==true)
     {
       Toast.makeText(multimedia_player2.this, str, Toast.LENGTH_LONG).show();
     }
     else
     {
       Toast.makeText(multimedia_player2.this, str, Toast.LENGTH_SHORT).show();
     }
   }
  

 //返回上一级Activity界面
 @Override
 public void onBackPressed() {
  // TODO Auto-generated method stub
  super.onBackPressed();
  Intent i =new Intent();
  i.setClass(multimedia_player2.this,multimedia.class);
  startActivity(i);
  finish();
 }
 
 
}

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/android2_bg9"
     >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:orientation="vertical" >

        <SurfaceView
            android:id="@+id/surfaceView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="0dp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" >

            <ImageButton
                android:id="@+id/imageButton_start"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/paly1" />

            <ImageButton
                android:id="@+id/imageButton_pause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/pause1" />

            <ImageButton
                android:id="@+id/imageButton_reset"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/reset1" />

            <ImageButton
                android:id="@+id/imageButton_stop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/stop" />
           
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

猜你喜欢

转载自liuzongming.iteye.com/blog/1929484
今日推荐