安卓的videoview设置全屏怎么设置预览图

Android VideoView本地视频播放 - 推酷
Android VideoView本地视频播放
本文将讲解使用VideoView播放本地视频,使用起来相对简单,在其中添加了MediaController类来实现更多的视频控制功能。
实现效果图:
布局文件:
使用VideoView,VideoView是一个带有视频播放功能的视图,可直接在布局中使用。
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
&VideoView
android:id=&@+id/videoView&
android:layout_width=&match_parent&
android:layout_height=&wrap_content& /&
&/RelativeLayout&
MainActivity:
package com.multimediademo11
import android.app.A
import android.net.U
import android.os.B
import android.os.E
import android.widget.MediaC
import android.widget.VideoV
public class MainActivity extends Activity {
private VideoView videoV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.videoView);
* VideoView控制视频播放的功能相对较少,具体而言,它只有start和pause方法。为了提供更多的控制,
* 可以实例化一个MediaController,并通过setMediaController方法把它设置为VideoView的控制器。
videoView.setMediaController(new MediaController(this));
Uri videoUri = Uri.parse(Environment.getExternalStorageDirectory()
.getPath() + &/1.mp4&);
videoView.setVideoURI(videoUri);
videoView.start();
源代码下载:
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示android开发中videoview的-中国学网-中国IT综合门户网站
> 信息中心 >
android开发中videoview的
来源:互联网 发表时间: 21:48:26 责任编辑:李志喜字体:
为了帮助网友解决“android开发中videoview的”相关的问题,中国学网通过互联网对“android开发中videoview的”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:android开发中videoview的自带的进度条如何隐藏,具体解决方案如下:解决方案1:播放,怎样把他们隐藏、上一个,但是videoview自带一个控制的区域、下一个四个控制键,有进度条我用android写了一个视频播放器解决方案2:除非你去改源代码,看看能不能设置为不自动隐藏android自带的播放器的进度条是默认会自动隐藏的,不能设置的。你可以下个其他的播放器解决方案3:你看这样行不行:MediaController mc = new MediaController(this);mc.setVisibility(View.INVISIBLE);videoView.setMediaController(mc);我是实现了,可以把VideoView自带的进度条隐藏。解决方案4:分给你了
2个回答2个回答1个回答1个回答1个回答2个回答3个回答1个回答1个回答1个回答1个回答1个回答1个回答3个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
I want to live idle lives...
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2264)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Android中VideoView播放当前工程中视频文件的方法',
blogAbstract:'
在VideoView设置uri的时候,加上\"android:resource//你的应用包名\"+视频文件在R文件中的ID名称 例如: videoView = (VideoView) this.findViewById(R.id.VideoView01); MediaController controller = new MediaController(this); this.videoView.setMediaController(controller); //下面android:resource://是固定的,org.dengzh是我的包名,R.raw.movie_1是id名称 videoView.setVideoURI(Uri.parse(\"android.resource://org.dengzh/\"+R.raw.movie_1)); ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:4,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'I want to live idle lives...',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}在Android中使用VideoView播放视频--嵌入式学院(华清远见旗下品牌)
在Android中使用VideoView播放视频
作者:温老师,讲师。
在Android中,播放视频有2种方式,第一种方式是使用MediaPlayer结合SurfaceView来播放,通过MediaPlayer来控制视频的播放、暂停、进度等,而通过SurfaceView来显示视频内容;第二种方式是使用VideoView来播放,这个类其实也是继承了SurfaceView类,并且实现了MediaController.MediaPlayerController这个用于控制媒体播放的接口,另外在VideoView上还有一个用于对媒体播放进行控制的面板,包括快进、快退、播放、暂停按钮以及一个进度条。使用VideoView播放视频的好处是简单,因为它已经帮我们实现了SurfaceView以及控制方法,我们只需要直接拿来使用就可以了,但它的缺点是灵活性不够。而使用MediaPlayer结合SurfaceView来播放视频的话,好处是可以更灵活的对其进行自定义,但缺点是难度比较大。这次我们先来看如何通过VideoView来实现视频的播放。
VidoeView的常用方法如下:
另外,媒体控制面板(MediaController)上也有一些有用的方法,如下表所示:
下面我们来看一个例子。
首先,我们要定义一个layout,在这个layout中,需要有一个VideoView组件,文件如下:
&&&&&&&&&?xml version=&1.0& encoding=&utf-8&?&
&&&&&&&&&LinearLayout xmlns:android=&/apk/res/android&
&&&&&&&&&&&&&&&&android:orientation=&vertical& android:layout_width=&fill_parent&
&&&&&&&&&&&&&&&&android:layout_height=&fill_parent&&
&&&&&&&&&VideoView android:id=&@+id/videoView1& android:layout_width=&match_parent&
&&&&&&&&&&&&&&&&android:layout_height=&match_parent&&&/VideoView&
&&&&&&&&&/LinearLayout&
这里定义了一个VideoView,它的id为videoVIew1,然后,我们来编写对应的Activity:
.farsight.
import android.app.A
&&&&&&&&import android.content.pm.ActivityI
&&&&&&&&import android.os.B
&&&&&&&&import android.view.W
&&&&&&&&import android.view.WindowM
&&&&&&&&import android.widget.MediaC
&&&&&&&&import android.widget.VideoV
&&&&&&&&public class MainActivity extends Activity {
&&&&&&&&public void onCreate(Bundle savedInstanceState) {
&&&&&&&&&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&&&&&&&&&//去掉头部title
&&&&&&&&&&&&&&&&requestWindowFeature(Window.FEATURE_NO_TITLE);
&&&&&&&&&&&&&&&& //设置全屏
&&&&&&&&&&&&&&&&setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
&&&&&&&&&&&&&&&&//设置屏幕常亮
&&&&&&&&&&&&&&&&getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
&&&&&&&&&&&&&&&&setContentView(R.layout.main);
&&&&&&&&&&&&&&&&VideoView vv = (VideoView)findViewById(R.id.videoView1);
&&&&&&&&&&&&&&&&vv.setVideoPath(&/mnt/sdcard/a5.mp4&);
&&&&&&&&&&&&&&&&//设置媒体控制条
&&&&&&&&&&&&&&&&vv.setMediaController(new MediaController(this));
&&&&&&&&&&&&&&&&vv.start();
&&&&&&&&&&&&&&&&vv.requestFocus();
&&&&&&&&&&&&&&&&}
这样,就可以播放在/mnt/sdcard/a5.mp4这个视频文件了。
另外,为了防止用户误按返回键而退出播放,可以在这个程序中覆盖onBackPressed方法,在这个方法中来处理用户点击返回键的动作,例如,只有用户在短时间内点击2次返回键才真正退出播放。查看: 6536|回复: 0
主题精华0帖子在线时间15 小时UID12023技术分840 资源分10 激情75 积分1010分享博客好友记录相册注册时间最后登录
从六品, 积分 1010, 距离下一级还需 1490 积分
UID12023技术分840 资源分10 激情75 博客记录相册
在中尝试编写自己的VideoView实现类。这样对VideoView的实现机制有了一个比较深入的理解。经过整理发现,其实要自定义需求,还真不一定需要重新自己的VideoView实现。在本文中将原来的CustomerVideoView的方法全部删除,并继承VideoView,发现功能上没有什么不能实现的。继承的CustomerVideoView最后其实只剩下继承来的构造方法,也就是说直接使用VideoView也没问题。
这次演进,实现了自定义的播放控制条:
14:19:20 上传
这个播放控制条,实际是替代了中的MediaController。这样就可以自定义各种样式和风格的控制条界面了。
另外,本文示例中默认不出现播放控制条,当识别到横向手势的时候,才显示该滚动条,并且根据横向手势的x轴位移前进或者后退播放视频的位置。
如果手指单击视频,则停止播放,再单击继续播放。
CustomerVideoView已经简化到可以直接使用VideoView替代:
package com.easymorse.
import android.content.C
import android.util.AttributeS
import android.widget.VideoV
public class CustomerVideoView extends VideoView {
& & private static String TAG = &customer.videoplayer&;
& & public CustomerVideoView(Context context, AttributeSet attrs, int defStyle) {
& && &&&super(context, attrs, defStyle);
& & public CustomerVideoView(Context context, AttributeSet attrs) {
& && &&&super(context, attrs);
& & public CustomerVideoView(Context context) {
& && &&&super(context);
}复制代码保留自定义CustomerVideoView的目的是: 以后可以通过覆盖方法增加更加个性化的功能;为什么要继承VideoView,是否能直接写自己的VideoView实现?这是一个问题,当然是可行的,比如mVideoPlayer就是这么干的,但是再查看VideoView源代码的时候,发现一些在Android源代码中公开的(public)类,在android sdk api中并没有,比如找不到android.media.Metadata类,调用MediaPlayer的时候也无法找到源代码中公开的(public)方法getMetadata方法,因此直接使用继承可以获得很多好处,间接使用未公开的api。
有关播放控制条的布局:
&RelativeLayout android:id=&@+id/mediaControllerLayout&
& & android:layout_height=&55dip& android:layout_width=&fill_parent&
& & android:visibility=&invisible& android:layout_alignParentBottom=&true&&
& & &View android:background=&#& android:layout_width=&fill_parent&
& && &&&android:layout_height=&1dip& /&
& & &ImageButton android:id=&@+id/playButton&
& && &&&android:layout_width=&wrap_content& android:src=&@drawable/pause_button_gray&
& && &&&android:layout_height=&wrap_content& android:layout_marginRight=&15.0dip&
& && &&&android:layout_alignParentRight=&true&
& && &&&android:layout_centerVertical=&true& /&
& & &RelativeLayout android:layout_width=&fill_parent&
& && &&&android:layout_height=&wrap_content& android:layout_marginLeft=&15.0dip&
& && &&&android:layout_marginRight=&15.0dip& android:layout_centerVertical=&true&
& && &&&android:layout_toLeftOf=&@id/playButton&&
& && &&&&SeekBar android:id=&@+id/videoSeekBar& android:focusable=&false&
& && && && &android:layout_width=&fill_parent& android:layout_height=&wrap_content&
& && && && &android:layout_marginBottom=&5.0dip&
& && && && &android:layout_alignParentBottom=&true& /&
& & &/RelativeLayout&
&/RelativeLayout&复制代码在这里还能加入其他需要的信息,比如当前播放时间,总时间等等。SeekBar是使用默认样式的,可以指定自己的样式和thumb小图标。 为了实现横向手势指定播放进度功能,需要让activity实现OnGestureListener接口,以前写过一个简单的示例,,可先参考了解。
在OnGestureListener中主要实现了以下方法。
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
& && &&&float velocityY) {
& & mediaControllerLayout.setVisibility(View.VISIBLE);
& & handler.postDelayed(new Runnable() {
& && &&&@Override
& && &&&public void run() {
& && && && &mediaControllerLayout.setVisibility(View.INVISIBLE);
& & }, 1000);
}复制代码其实这个方法中的内容也可以实现在下面提到的onScroll方法中。onFling主要是处理有有关速度横向和纵向的手势。这里用来触发显示播放控制条界面。并且通过postDelayed方法在1秒钟后让控制条不可见。这里还可以改进,用动画来处理出现和消失的效果。
onSingleTapUp:@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(this, &taped&, Toast.LENGTH_SHORT).show();
if (videoView.isPlaying()) {
videoView.pause();
videoView.start();
}复制代码用来识别单击屏幕的手势,并做视频的暂停和继续播放。
onScroll:@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
if (distanceX & 0) {
this.videoSeekBar
.setProgress(this.videoSeekBar.getProgress() – 1);
this.videoSeekBar
.setProgress(this.videoSeekBar.getProgress() + 1);
videoView.seekTo((int) (this.videoSeekBar.getProgress() * 1.0
/ videoSeekBar.getMax() * videoView.getDuration()));
}复制代码识别手势横向左右位移,这里实现的很简单,进度条根据动作固定的为进度条加1%或者减1%。视频再根据滚动条做调整。正式的代码,应该根据位移的长度来适当的定位滚动条的位置。手势的××xx要实现,还需要两件事情。
实例化GestureDetector:private GestureDetector gestureD
this.gestureDetector = new GestureDetector(this);复制代码覆盖Activity的onTouchEvent方法:
public boolean onTouchEvent(MotionEvent event) {
& & return this.gestureDetector.onTouchEvent(event);
}复制代码这样才会把触摸事件转到手势××xx。
另外,也可以手动拨动滚动条上的thumb,需要通过下面方法支持:@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
& & if (fromUser) {
& && &&&videoView.seekTo((int) (progress * 1.0 / seekBar.getMax() * videoView .getDuration()));
& && &&&seekBar.setProgress(progress);
}复制代码源代码见:
进一步可以做的是:
在播放器中保存用户播放视频中止时的播放位置,再次播放的时候从中止的位置播放;
设置menu项,用户可以清除保存的位置,这样可以从头播放;
屏幕的适配,目前是按照视频原生大小播放,可以增加拉伸适配全屏功能,并通过menu项切换;
视频的横屏和竖屏切花;
设置intent,这样可以在用户播放视频的时候,可以出现应用列表,用户可以选择android内置播放器以外的应用播放;
做一个比较好的动画,在单击暂停的时候播放。
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&
Powered by

我要回帖

更多关于 videoview 预览图 的文章

 

随机推荐