1. 这里我们还是利用案例演示视频播放器的使用:

(1)首先,我们看看布局文件activity_main.xml,如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.himi.videoplayer.MainActivity" > <VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <LinearLayout
android:id="@+id/ll_controller"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical" > <LinearLayout
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> <Button
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=">" /> <Button
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="□" /> <Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="||" />
</LinearLayout> <SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout> </
RelativeLayout>

这里VideoView是google封装好的视频播放的控件,与之配套有很多API,直接就可以调用,这里我们希望视频播放时候,屏幕横着,同时这里VideoView很强大,不仅可以播放本地视频,也可以播放网络视频,这里我们测试播放网络视频,利用Tomcat服务器测试,如下:
开启Tomcat服务器,在Tomcat服务器的文件根目录存放文件oppo.mp4,如下图:

同时,配置一下AndroidMainfest.xml文件,如下:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.himi.videoplayer"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
<activity
android:screenOrientation="landscape"
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen "  :  播放时设置全屏

android:screenOrientation="landscape" :播放时候设置横屏

不要忘记 添加网络访问的权限: <uses-permission android:name="android.permission.INTERNET"/>

(2)接下来进入MainActivity,如下:

 package com.himi.videoplayer;

 import java.util.Timer;
import java.util.TimerTask; import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.VideoView; public class MainActivity extends Activity {
private SeekBar seekBar1;
private LinearLayout ll_controller;
private VideoView vv;
private Timer timer;// 计时器
private TimerTask task;//计时器任务 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); vv = (VideoView) findViewById(R.id.vv);
ll_controller = (LinearLayout) findViewById(R.id.ll_controller);
seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(SeekBar seekBar) {
vv.seekTo(seekBar.getProgress());
} public void onStartTrackingTouch(SeekBar seekBar) { } public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) { }
}); vv.setVideoPath("http://49.123.72.40:8080/oppo.mp4");
vv.start(); timer = new Timer();
task = new TimerTask() { @Override
public void run() {
// 每隔一秒执行下run方法 int max = vv.getDuration();// 获取视频的总时长
seekBar1.setMax(max); int process = vv.getCurrentPosition();
seekBar1.setProgress(process); }
};
timer.schedule(task, 0, 1000);//第二参数为表示等待多长时间,第一次启动任务;这里为0,表示马上启动
} @Override
protected void onDestroy() {
timer.cancel();
task.cancel();
timer = null;
task = null;
super.onDestroy();
} @Override
public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (ll_controller.getVisibility() == View.VISIBLE) { ll_controller.setVisibility(View.INVISIBLE);// 隐藏
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1.0f);
ta.setDuration(200);
ll_controller.startAnimation(ta);
} else if (ll_controller.getVisibility() == View.INVISIBLE) { ll_controller.setVisibility(View.VISIBLE);// 显示ll_controller.setVisibility(View.INVISIBLE);//隐藏
final TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0);
ta.setDuration(200);
ll_controller.startAnimation(ta); new Thread() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
runOnUiThread(new Runnable() { public void run() {
ll_controller.startAnimation(ta); }
});
};
}.start(); } }
return super.onTouchEvent(event);
} }

Android(java)学习笔记243:多媒体之视频播放器的更多相关文章

  1. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  4. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  5. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  6. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  7. 20145316许心远《Java学习笔记(第8版)》课程总结

    20145316许心远<Java学习笔记(第8版)>课程总结 每周读书笔记链接汇总 ▪ 第一周读书笔记 ▪ 第二周读书笔记 ▪ 第三周读书笔记 ▪ 第四周读书笔记 ▪ 第五周读书笔记 ▪ ...

  8. Android:日常学习笔记(6)——探究活动(4)

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  9. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  10. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

随机推荐

  1. C#中静态方法和非静态方法的区别(一)

    实例方法比静态方法多传递一个隐含的指针参数,该指针指向该方法所从属的已被实例化的对象.这一区别的外在表现为实例方法内可使用this关键字代表所从属的实例对象,而静态方法不可使用this因为静态方法不针 ...

  2. OrCAD PSpice仿真库模型

    说明:本介绍包含了\capture\library\pspice和capture\library\pspice\advanls目录下所有库,但由于作者水平有限,介绍得也比较简单,有些说明可能不一定对. ...

  3. 转:PHP如何阻止用户上传成人照片或者裸照

    原文来自于:http://www.hackbase.com/tech/2014-10-12/69367.html 当前,网络淫秽色情信息屡禁不止.屡打不绝,严重危害未成年人身心健康,严重败坏社会风气, ...

  4. 1. android

    http://blog.csdn.net/mirkerson/article/details/7238815

  5. BZOJ 1037 生日聚会

    Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: ...

  6. Unity3d Web3d资源的动态加载

    Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...

  7. 转一篇NGINX+UWSGI+PYTHON+DJANGO部署文档

    高远弄的,,专业,明晓..感谢哈哈. http://blog.csdn.net/tmpbook/article/details/42873667

  8. C#验证码使用

    1.C#创建验证码 1.1 创建获取验证码页面(ValidateCode.aspx) <html xmlns="http://www.w3.org/1999/xhtml"&g ...

  9. COJ 2124 Day8-例1

    Day8-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定n.m的值,求

  10. linkedin和facebook的区别

    摘录一段百科(http://www.baike.com/wiki/LinkedIn)的文字: Linkedin - 特点 Linked是一个“高效”.“安全”并且“有商务价值”的“白领SNS提供商”: ...