☰分类导航

软件工程/多媒体与传感器
课程进度 47% · 第6/11章第6/11章 · 标签 1/6
— 1 —

图片加载(Glide)

图片、音频、CameraX与传感器代码需要真实Android宿主、依赖、资源及必要权限。CameraX异步获取使用官方ListenableFuture监听方式;系统相机旧回调例说明历史接入,缩略图不等于原图。

Glide 是 Google 官方推荐的图片加载库,支持图片缓存、缩略图、GIF 播放等特性。

压缩文件大小不等于解码内存大小。列表只显示小缩略图时应按目标尺寸加载,并给复用View设置占位与失败状态;页面离开后请求也要与宿主关联。图片库能处理部分缓存和取消,不会自动替你决定用户切换后的隐私缓存规则。


```java
// 基本使用
Glide.with(context)
    .load(url)
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .into(imageView);

// 圆形裁剪
Glide.with(context)
    .load(url)
    .circleCrop()
    .into(imageView);

// 指定尺寸
Glide.with(context)
    .load(url)
    .override(300, 200)
    .into(imageView);
```
java
1
// 基本使用
2
Glide.with(context)
3
.load(url)
4
.placeholder(R.drawable.placeholder)
5
.error(R.drawable.error)
6
.into(imageView);
7
 
8
// 圆形裁剪
9
Glide.with(context)
10
.load(url)
11
.circleCrop()
12
.into(imageView);
13
 
14
// 指定尺寸
15
Glide.with(context)
16
.load(url)
17
.override(300, 200)
18
.into(imageView);

📖Glide 需要添加依赖:implementation 'com.github.bumptech.glide:glide:4.15.1'

— 2 —

音频播放(MediaPlayer)

MediaPlayer 支持播放本地和网络音频文件,支持播放控制与状态管理。

播放器有状态前提:网络音频需要准备完成后才能启动,异步准备可能失败,退出页面也需明确是否继续播放。准备监听与错误监听应在启动异步准备前安装,释放后不能继续操作原实例,否则一次成功播放会掩盖后续状态错误。


```java
// 创建并启动播放
MediaPlayer player = MediaPlayer.create(context, R.raw.music);
player.start();

// 暂停
player.pause();

// 停止并释放资源
player.stop();
player.release();
player = null;

// 播放网络音频
MediaPlayer networkPlayer = new MediaPlayer();
networkPlayer.setDataSource("https://example.com/audio.mp3");
networkPlayer.prepareAsync();
networkPlayer.setOnPreparedListener(MediaPlayer::start);
```
java
1
// 创建并启动播放
2
MediaPlayer player = MediaPlayer.create(context, R.raw.music);
3
player.start();
4
 
5
// 暂停
6
player.pause();
7
 
8
// 停止并释放资源
9
player.stop();
10
player.release();
11
player = null;
12
 
13
// 播放网络音频
14
MediaPlayer networkPlayer = new MediaPlayer();
15
networkPlayer.setDataSource("https://example.com/audio.mp3");
16
networkPlayer.prepareAsync();
17
networkPlayer.setOnPreparedListener(MediaPlayer::start);
◆

MediaPlayer 生命周期

  • Idle —— 初始状态或 reset() 后
  • Initialized —— setDataSource() 后
  • Preparing —— prepareAsync() 异步准备中
  • Prepared —— 准备完成,可调用 start()
  • Started —— 正在播放
  • Paused —— 暂停
  • Stopped —— 停止
  • End —— 播放完成