课程进度 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 —— 播放完成