Android 应用基础技术6_第1页
Android 应用基础技术6_第2页
Android 应用基础技术6_第3页
Android 应用基础技术6_第4页
Android 应用基础技术6_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章多媒体应用Android的多媒体框架提供了播放音频、视频及图像的相关方式。通过该框架,可以处理来自资源文件、手机本地存储系统,甚至来自网络的多媒体内容。Android的多媒体框架中最重要和常用的类就是MediaPlayer,通过使用MediaPlayer对象,程序可以获取、解码和播放包括音频和视频在内的多媒体资源。所播放的媒体内容可以来自程序资源(放置在res/raw目录下,因为Android不会对放置在这个目录下的资源进行任何处理,所以,放置在这个目录下的文件将保持原样)、来自本地文件或来自网络等。本章对使用MediaPlayer对象播放音频和视频的内容进行介绍。目录10.1使用MediaPlayer播放音频10.2使用VideoView播放视频10.3课后同步练习10.4使用相机拍摄照片10.1使用MediaPlayer播放音频MediaPlayer提供了几个静态的create()方法用于创建MediaPlayer对象,典型的方法包括:其一,MediaPlayercreate(Contextcontext,intresId),该方法为指定的资源创建MediaPlayer对象;其二,MediaPlayercreate(Contextcontext,Uriuri),该方法为指定的Uri创建MediaPlayer对象。简单来说就是:create(Contextcontext,intresId)用于播放存放在res/raw资源目录下的音频资源,而create(Contextcontext,Uriuri)可以播放来自任何Uri的音频。对于需要播放的简短音频,建议将音频文件存放在资源目录下,也就是res/raw目录下。下面通过一个具体的例子来看看如何使用这种方式来播放简短的音频。程序显示一个简短的时间长度为4秒的启动动画,期间将同步循环播放一段音频(因为音频的长度可能少于4秒,所以需要循环播放),动画结束时,也停止播放音频。新建一个名为ch1001的工程,并在res工程目录下分别新建名为raw和anim的子资源目录。在res/raw工程目录下放置一个要播放的音频文件,其文件名为ring08.wav。现在来修改布局文件res/layout/activity_main.xml,其内容如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<ImageViewandroid:id="@+id/id_image_view"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter"android:src="@mipmap/ic_launcher"android:contentDescription="hello_world"/>

</LinearLayout>在res/anim目录下新建一个名为my_scale.xml的动画文件,其内容如下:<?xmlversion="1.0"encoding="utf-8"?><scalexmlns:android="/apk/res/android"android:interpolator="@android:anim/linear_interpolator"android:fromXScale="0"android:toXScale="1"android:fromYScale="0"android:toYScale="1"android:pivotX="50%"android:pivotY="50%"android:duration="4000"android:fillAfter="true"></scale>修改MainActivity.java文件,修改后的内容如下:packagecom.example.ch1001;

importandroid.media.MediaPlayer;importandroid.os.Bundle;importandroid.view.animation.Animation;importandroid.view.animation.AnimationUtils;importandroid.widget.ImageView;

importandroidx.activity.EdgeToEdge;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.graphics.Insets;importandroidx.core.view.ViewCompat;importandroidx.core.view.WindowInsetsCompat;

publicclassMainActivityextendsAppCompatActivity{privateMediaPlayermp;

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});

mp=null;ImageViewiv=findViewById(R.id.id_image_view);Animationrotate=AnimationUtils.loadAnimation(this,R.anim.my_scale);rotate.setAnimationListener(newAnimation.AnimationListener(){

@OverridepublicvoidonAnimationStart(Animationanimation){mp=MediaPlayer.create(MainActivity.this,R.raw.ring08);mp.setLooping(true);mp.setVolume(0.5f,0.5f);mp.start();}

@OverridepublicvoidonAnimationEnd(Animationanimation){mp.stop();mp.release();mp=null;}

@OverridepublicvoidonAnimationRepeat(Animationanimation){}

});iv.startAnimation(rotate);}}10.2使用VideoView播放视频可以使用MediaPlayer播放视频。要播放视频,需要创建用于显示视频的Surface组件,这比较麻烦。为此,Android提供了便利的视频组件VideoView来播放视频。下面通过一个例子来介绍如何使用VideoView来播放视频。这个例子使用VideoView播放存储在res/raw资源目录下的一段视频。为此,新建ch1002的工程,在res/raw目录下放置要播放的视频,然后,修改主界面布局文件activity_main.xml为如下代码:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<VideoViewandroid:id="@+id/id_videoview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true"/>

</LinearLayout>修改MainActivity.java程序,修改后的程序如下:packagecom.example.ch1002;

import.Uri;importandroid.os.Bundle;importandroid.widget.VideoView;

importandroidx.activity.EdgeToEdge;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.graphics.Insets;importandroidx.core.view.ViewCompat;importandroidx.core.view.WindowInsetsCompat;

publicclassMainActivityextendsAppCompatActivity{

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});

VideoViewvideoView=findViewById(R.id.id_videoview);Stringuri="android.resource://"+getPackageName()+"/"+R.raw.sample;videoView.setVideoURI(Uri.parse(uri));videoView.start();}}10.3课后同步练习编写一个程序,该程序既可以播放音频又可以播放视频。要求所编写的程序界面清晰简单,可操作性强,让人一目了然就可以使用。10.4使用相机拍摄照片直接操作相机传感器开发完整的相机应用是一项相当复杂的工作。为此,Android设备都提供了基本的相机应用APP,应用程序可以使用设备上默认的相机应用APP执行拍照。下面通过一个简单的例子说明如何打开相机拍照并获取所拍摄照片。这个例子有一个按钮,点击按钮将启动相机应用APP,并将拍摄的照片显示在界面的ImageView中。为此,新建ch1003的工程,修改主界面布局文件res/lay/activity_main.xml为如下代码:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity">

<Buttonandroid:id="@+id/btn01"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="打开相机拍照"/>

<ImageViewandroid:id="@+id/img01"android:layout_width="match_parent"android:layout_height="250dp"android:layout_margin="15dp"android:scaleType="fitXY"/>

</LinearLayout>修改MainActivity.java为如下内容:packagecom.example.ch1003;

importandroid.app.AlertDialog;importandroid.content.ActivityNotFoundException;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.os.Bundle;importvider.MediaStore;importandroid.view.View;importandroid.widget.ImageView;importandroid.widget.Toast;

importandroidx.activity.EdgeToEdge;importandroidx.annotation.Nullable;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.graphics.Insets;importandroidx.core.view.ViewCompat;importandroidx.core.view.WindowInsetsCompat;

publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener{staticfinalintREQUEST_IMAGE_CAPTURE=1;ImageViewimageView;

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});

findViewById(R.id.btn01).setOnClickListener(this);imageView=findViewById(R.id.img01);}

@OverridepublicvoidonClick(Viewv){IntenttakePictureIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);try{startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);}catch(ActivityNotFoundExceptione){showAlertDialog();}}

@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,@NullableIntentresult){super.onActivityResult(requestCode,resultCode,result);

if(requestCode==REQUEST_IMAGE_CAPTURE&&resultCode==RESULT_OK){if(result!=null&&result.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论