【安卓开发】常用第三方组件库的使用

图片加载库

1. Glide 图片库

Glide 是 Google 推荐的图片加载库,具有以下特点:

  • 自动内存和磁盘缓存管理
  • 支持 GIF、WebP 等格式
  • 生命周期自动绑定(与Activity/Fragment联动)
  • 高效的Bitmap池和内存管理
基本使用
// 添加依赖
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0
// 基础加载
Glide.with(context)
    .load(imageUrl)
    .placeholder(R.drawable.placeholder) // 占位图
    .error(R.drawable.error)            // 错误图
    .into(imageView);

// 加载圆形图片
Glide.with(context)
    .load(imageUrl)
    .circleCrop()
    .into(imageView);
高级功能
// 自定义变换
RequestOptions options = new RequestOptions()
    .transform(new BlurTransformation(25));

Glide.with(context)
    .load(imageUrl)
    .apply(options)
    .into(imageView);

// 加载GIF
Glide.with(context)
    .asGif()
    .load(gifUrl)
    .into(imageView);

2. Glide 样式库

典型应用场景
  • 用户头像处理(圆形+边框)

  • 图片列表(统一风格处理)

  • 特殊视觉效果(模糊、黑白等)

// 添加依赖
implementation 'jp.wasabeef:glide-transformations:4.3.0'

// 使用示例 - 模糊+灰度
Glide.with(context)
    .load(imageUrl)
    .apply(RequestOptions.bitmapTransform(
        new MultiTransformation<>(
            new BlurTransformation(25),
            new GrayscaleTransformation()
        ))
    .into(imageView);

媒体播放库

ExoPlayer (视频/音频)

架构优势

相比MediaPlayer的优势:

  • 模块化设计(可自定义组件)

  • DASH/HLS流媒体支持

  • 更精准的播放控制

  • 更好的错误恢复机制

完整生命周期管理
基础配置
// 添加依赖
implementation 'com.google.android.exoplayer:exoplayer:2.18.1'

// 初始化
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();
playerView.setPlayer(player);

// 准备媒体源
MediaItem mediaItem = MediaItem.fromUri(mediaUrl);
player.setMediaItem(mediaItem);
player.prepare();
player.play();
高级功能
// 设置循环播放
player.setRepeatMode(Player.REPEAT_MODE_ALL);

// 监听播放状态
player.addListener(new Player.Listener() {
    @Override
    public void onPlaybackStateChanged(int state) {
        if (state == Player.STATE_ENDED) {
            // 播放结束处理
        }
    }
});

// 释放资源
player.release();

数据存储

MMKV (改进SharedPreferences)

性能对比
特性MMKVSharedPreferences
读写速度1000次/3ms1000次/400ms
跨进程支持不支持
数据安全支持加密无加密
存储大小自动扩展固定大小
// 添加依赖
implementation 'com.tencent:mmkv:1.2.14'

// 初始化
String rootDir = MMKV.initialize(context);

// 基本使用
MMKV kv = MMKV.defaultMMKV();

// 存储数据
kv.encode("bool_key", true);
kv.encode("int_key", 123);
kv.encode("string_key", "Hello MMKV");

// 读取数据
boolean bValue = kv.decodeBool("bool_key");
int iValue = kv.decodeInt("int_key");
String strValue = kv.decodeString("string_key");

UI组件

1. 瀑布流实现

// RecyclerView + StaggeredGridLayoutManager
RecyclerView recyclerView = findViewById(R.id.recyclerView);
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(
    2, // 列数
    StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);

// 适配器需处理不同高度的item
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        // 动态设置item高度
        ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
        params.height = getRandomHeight(); // 随机高度
        holder.itemView.setLayoutParams(params);
    }
}

2. BaseRecyclerViewAdapterHelper

BaseRecyclerViewAdapterHelper 相比原生Adapter研发效率提升70%

// 添加依赖
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.7'

// 快速实现适配器
public class QuickAdapter extends BaseQuickAdapter<ItemBean, BaseViewHolder> {
    public QuickAdapter(List<ItemBean> data) {
        super(R.layout.item_layout, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, ItemBean item) {
        helper.setText(R.id.tv_title, item.getTitle())
              .setImageResource(R.id.iv_icon, item.getIcon());
    }
}

// 添加点击事件
adapter.setOnItemClickListener((adapter, view, position) -> {
    // 点击处理
});

刷新组件

1. SwipeRefreshLayout (官方下拉刷新)

SwipeRefreshLayout 只能包裹一个子控件,可以是任意子控件(ListView RecyclerView ScrollView),不支持上拉加载更多功能

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
swipeRefresh.setOnRefreshListener(() -> {
    // 刷新数据
    new Handler().postDelayed(() -> {
        swipeRefresh.setRefreshing(false);
    }, 2000);
});

2. PullToRefresh (第三方)

支持下拉刷新和上拉加载,只支持ListView,不支持RecyclerView

// 添加依赖
implementation 'com.handmark.pulltorefresh.library:pulltorefresh:2.1.1'

// ListView使用
PullToRefreshListView listView = findViewById(R.id.pullToRefreshListView);
listView.setOnRefreshListener(() -> {
    // 下拉刷新
    new Handler().postDelayed(() -> {
        listView.onRefreshComplete();
    }, 2000);
});

listView.setOnLastItemVisibleListener(() -> {
    // 上拉加载更多
});

事件通信

EventBus

EventBus 适用于Android和Java的发布/订阅事件总线,便于实现多线程间的消息通信(观察者模式)

线程模式详解
模式描述适用场景
ThreadMode.POSTING默认模式,在发送线程执行快速同步操作
ThreadMode.MAIN主线程执行UI更新操作
ThreadMode.MAIN_ORDERED有序主线程执行需要严格顺序的UI更新
ThreadMode.BACKGROUND后台线程执行(非主线程)轻量级后台任务
ThreadMode.ASYNC独立线程执行耗时IO操作
// 添加依赖
implementation 'org.greenrobot:eventbus:3.3.1'

// 定义事件
public class MessageEvent {
    public final String message;
    public MessageEvent(String message) {
        this.message = message;
    }
}

// 发布事件
EventBus.getDefault().post(new MessageEvent("Hello EventBus!"));

// 订阅事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(context, event.message, Toast.LENGTH_SHORT).show();
}

// 注册/注销
@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值