package com.FJICC.lzm;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MediaController;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
public class multimedia_player extends Activity {
private VideoView mVideoView01;
private String strVideoPath = "";//视频存放的路径
private String TAG = "HIPPO_VIDEOVIEW";
private boolean fullscreen = false;//全屏/窗口播放切换标志
/* 判断是否安装存储卡flagfalse */
private boolean bIfSDExist = false;
////返回键按钮,返回上一级Activity
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
Intent i =new Intent();
i.setClass(multimedia_player.this,multimedia.class);
startActivity(i);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.multimedia_player);
/* 判断存储卡是否存在*/
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
{
bIfSDExist = true;
showDialog(1);
}
else
{
bIfSDExist = false;
mMakeTextToast
(
getResources().getText(R.string.str_err_nosd).toString(),
true
);
}
//获取VideoView对象
mVideoView01 = (VideoView)findViewById(R.id.myVideoView1);
//设置视频播放器,准备函数
mVideoView01.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
// TODO Auto-generated method stub
// mTextView01.setText(strVideoPath);
setTitle(strVideoPath.toString());
}
});
//设置视频播放完毕动作,可以在内部设置是否重复播放
mVideoView01.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer arg0)
{
// TODO Auto-generated method stub
mMakeTextToast
(
getResources().getText(R.string.str_complete).toString(),
true
);
}
});
}
//媒体播放动作函数
private void playVideo(String strPath)
{
if(strPath!="")
{
/*调用VideoURI方法,指定解析路径 */
mVideoView01.setVideoURI(Uri.parse(strPath));
/* 设置控制Bar,显示在Context中*/
mVideoView01.setMediaController(new MediaController(multimedia_player.this));
mVideoView01.requestFocus();
/*调用VideoView.start()自动播放*/
mVideoView01.start();
if(mVideoView01.isPlaying())
{
/* start()后,仍需要preparing() */
//mTextView01.setText("Now Playing:"+strPath);
setTitle(strVideoPath.toString());
Log.i(TAG, strPath);
}
}
}
/**媒体重新从头播放函数 */
private void resetVideo()
{
if(mVideoView01!=null)
{
mVideoView01.seekTo(0);
}
}
//提示消息Toast弹出消息函数
public void mMakeTextToast(String str, boolean isLong)
{
if(isLong==true)
{
Toast.makeText(multimedia_player.this, str, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(multimedia_player.this, str, Toast.LENGTH_SHORT).show();
}
}
//添加OptinMenu函数
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
//参数说明:menu.add((int groupId, int itemId, int order, charsequence title).setIcon(drawable ID)
// 1、组别,如果不分组的话就写Menu.NONE,
// 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
// 3、顺序,哪个菜单项在前面由这个参数的大小决定
// 4、文本,菜单项的显示文本
menu.add(0,2,0,"输入文件名");
menu.add(0,0,1,"返回");//
menu.add(0,1,2,"播放视频");
menu.add(0,3,3,"全屏/窗口切换");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId())//菜单序号
{
case 0://返回上级
{
////返回上一级Activity
Intent i =new Intent();
i.setClass(multimedia_player.this,multimedia.class);
startActivity(i);
finish();
}
break;
case 1://播放视频
{
playVideo(strVideoPath);
}
break;
case 2://输入播放的文件名称 在SD卡的/DIMC文件夹下;或者输入网络视频地址
{
showDialog(0);
}
break;
case 3://全屏/窗口切换
{
if(!fullscreen){//设置RelativeLayout的全屏模式
RelativeLayout.LayoutParams layoutParams=
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
mVideoView01.setLayoutParams(layoutParams);
fullscreen = true;//改变全屏/窗口的标记
}else{//设置RelativeLayout的窗口模式
RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(320,240);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
mVideoView01.setLayoutParams(lp);
fullscreen = false;//改变全屏/窗口的标记
}
}
break;
}
// return true;
return super.onOptionsItemSelected(item);
}
@Override
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;
//播放网络视频
//播放网络视频需要 输 入 视 频 网 络 地 址://在权限中需加入 INTERNET权限和WAKE_LOCK权限
//http://www.baudu.media.ooxx/test.mp4
//strVideoPath=pathTV.getText().toString();//此时输入的为 视频(3gp/mp4/H.264)网络地址
setTitle("Playing" + strVideoPath);
}
}).create();
return dialog0;
}
case 1:{
videoPath.setText(" ");
videoPath.setEnabled(false);
Dialog dialog1 = new AlertDialog.Builder(this)
.setTitle("播放器提示").setMessage("请点击Option键进行视频载入")
.setView(v)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
}).create();
return dialog1;
}
default:
return null;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.23" >
<VideoView
android:id="@+id/myVideoView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
相关推荐
从提供的压缩包名称来看,`AndroidVideoView-master` 可能是一个示例项目,展示了如何实现`VideoView` 的全屏播放以及音量和亮度控制。你可以下载并研究该项目,以便更好地理解这些功能的实现细节。 总的来说,`...
在Android开发中,VideoView是系统提供的一种用于播放视频的视图组件,它极大地简化了视频播放的功能。然而,为了满足更多个性化的需求,开发者经常需要对VideoView进行自定义,以便实现更丰富的功能,比如控制面板...
首先,`VideoView`是Android SDK中的一个视图类,它允许开发者在应用程序中嵌入视频播放功能。`VideoView`继承自`SurfaceView`,并实现了`MediaPlayer`的接口,可以直接加载本地或网络视频进行播放。使用`VideoView`...
【WebView实现全屏播放】是Android开发中一个重要的应用场景,主要涉及到如何在WebView中嵌入视频并实现全屏播放的功能。这一技术广泛应用于各种移动应用,例如社交媒体、在线教育平台等,让用户能够在不离开应用的...
在Android开发中,创建一个支持全屏和小窗口播放切换的视频播放器是常见的需求,特别是在构建媒体应用或者社交应用时。"NiceVieoPlayer"是一个专为此目的设计的开源项目,它允许用户在全屏模式和悬浮小窗口模式之间...
MediaController是Android提供的一个组件,它可以为视频播放提供控制界面,包括播放/暂停按钮、进度条等。我们可以通过以下方式实现: ```java SurfaceView surfaceView = findViewById(R.id.surface_view); ...
布局应包括播放/暂停按钮、进度条、全屏按钮等元素。 4. **VideoView或ExoPlayer**: 在Android中,可以使用`VideoView`进行简单的视频播放,但若需更高级的功能,如自定义解码、适应性流媒体等,推荐使用...
在Android开发中,浮动窗口(通常称为悬浮窗或系统窗口)是一种可以在应用程序之上或之下显示的特殊视图,允许用户在执行其他操作的同时查看或交互。Android 视频浮动窗口源码是一个很好的学习资源,它展示了如何...
在Android开发中,VideoView是系统提供的一种用于播放视频的视图组件,它极大地简化了在应用程序中集成视频播放的功能。VideoView可以加载本地存储的视频文件或通过URL播放网络视频,非常适合创建简单的媒体播放器...
- **显示控制**:可以通过`setMediaController()`绑定一个`MediaController`对象,提供播放/暂停等控制按钮。 ### 实践应用 在实际开发中,开发者通常根据需求选择合适的播放组件。例如,对于背景音乐,`...
3. **视频播放控件**:为了提供良好的用户体验,需要设计一套完整的视频播放控件,如播放/暂停按钮、进度条、音量控制、全屏切换等。可以使用Android自带的VideoView或自定义SurfaceView来显示视频,并结合...
为了提供更好的用户体验,通常会添加一个控制面板(MediaController),它包含了播放/暂停按钮、进度条等控件。 **代码示例:** ```java videoView.setMediaController(new MediaController(this)); ``` ##### 4. ...
总的来说,实现安卓视频播放悬浮全屏竖屏切换技术,需要对Android的视图组件、窗口管理、布局管理、状态保存恢复有深入理解,以及灵活运用第三方库。通过以上步骤,你可以为用户提供一个流畅、无缝的视频观看体验。
在Android开发中,视频播放是常见的功能之一,而MediaController是Android系统提供的一个用于控制视频播放的组件。本文将深入探讨如何实现MediaController中的进度条重写以及全屏切换功能。 首先,我们要理解...
3. **自定义View**:浮动窗口通常是一个自定义的View或ViewGroup,它包含了播放器界面的元素,如播放/暂停按钮、进度条等。开发者需要根据需求设计布局,并实现相应的触摸事件处理和视图更新逻辑。 4. **VideoView...
在压缩包中的"tzt_mediavideo"可能是一个与媒体播放相关的文件或项目,可能涉及到Activity全屏播放视频的情况。在处理这种情况时,我们还需要关注VideoView、SurfaceView或者ExoPlayer等媒体播放组件的使用,它们...
在Android开发中,视频播放是不可或缺的功能之一,本篇文章将对Android中的几种主要视频播放方式进行深入探讨,包括VideoView、MediaPlayer结合SurfaceView、饺子播放器(JiaoZiVideoPlayer)以及MediaPlayer与...
9. **自定义播放器UI**:虽然VideoView提供了一些基本的控制界面,但往往需要根据应用需求定制自己的播放界面,如添加全屏切换、亮度调节等功能。 10. **音视频同步**:在播放过程中,保持音频和视频同步是一项挑战...
VideoView可以直接加载并播放媒体资源,而SurfaceView可以提供更底层的控制,适合实现复杂效果如全屏播放。 5. **布局设计**: - **RelativeLayout**: 主界面使用了RelativeLayout作为根布局,它允许子视图相对...
- `MediaController`:为`VideoView`提供控制面板,包括播放/暂停、进度条等操作。 - `setFlags()`:设置窗口的标志,例如全屏模式`FLAG_FULLSCREEN`。 - `setFeatureInt()`:设置自定义标题栏,传递布局资源ID。...