在线视频播放App的实现

前一段时间在公司项目上做了一个视频播放的功能,当时时间紧,做完之后感觉有些地方处理的不好,所以就基于当时实现的思路进行了一些改进,加上自己平时喜欢看新闻客户端里面的一些短视频,所以就用网易等客户端的视频数据完成了一个独立的视频播放APP,顺便巩固下其他的技术。

主要使用的开源库

Mosby(一个MVP框架)、RxJava、Retrofit2、ButterKnife、Glide、Systembartint、TigerDB、Material Design相关控件

主要功能

  1. 列表中播放视频
  2. 列表滑动时如果正在播放视频,则列表中播放的视频自动切换为小窗口浮动播放
  3. 列表播放切换到全屏播放模式
  4. 视频播放时也添加了完整的暂停、播放等控制操作,也添加了视频播放进度,视频缓冲进度等显示功能
  5. 视频全屏播放时支持左右滑动实现视频的快进和后退,支持右边上下滑动调整播放音量,左边上下滑动调整播放器的亮度等手势控制操作

Retrofit2文件上传下载及其进度显示

前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示。

文件上传

定义接口
1
2
3
@Multipart
@POST("fileService")
Call<User> uploadFile(@Part MultipartBody.Part file);
构造请求体上传
1
2
3
4
5
File file = new File(filePath);
RequestBody body = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
Call<User> call = getRetrofitService().uploadOneFile(part);
call.enqueue(callback);

Retrofit2使用介绍

前言

对于还不知道Refrofit是什么的同学,我只能说你们太out了,赶紧去Google下,本文是针对Retrofit2.0的使用介绍,当然大家也可以直接去官网上去看使用介绍

添加依赖

要使用Retrofit首先得添加gradle依赖

1
2
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

声明服务接口

依赖添加完成之后,就可以开始撸代码了,首先我们要新建一个Interface,这个接口就是你要请求的接口服务类,就像这个样子

1
2
3
4
5
6
public interface RetrofitService {

@GET("getModelService")
Call<User> getModelService();
...
}

上面这个接口中暂时只声明了一个方法,而在Retrofit中想这样声明的一个方法就代表了一个具体的Http请求接口。Retrofit中方法上添加@GET注解就表示当前方法代表一个Get请求,我们声明的这个请求方法不带任何参数,且返回结果是User对象。
@GET注解括号中的值getModelService就代表http请求地址的具体指向,这个值与下面baseUrl中配置的URL一起组成一个完整的请求地址
Retrofit就是这么任性,它可以帮我们把http的请求结果自动转换成Javabean对象,这将为我们减少不少编码工作。

构造Retrofit对象

接口服务声明完成之后,我们接着需要新建一个Retrofit对象

1
2
3
4
5
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/AndroidService/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitService service = retrofit.create(RetrofitService.class);

让RecyclerView更通用

何为通用

用过RecyclerView的都知道它没有为我们提供像ListView中类似addHeaderView,addFooterView,setOnItemClickListener,setOnItemLongClickListener的接口,另外还有底部自动加载更多,这些都是列表使用中很常见的功能,所以如果我们使用RecyclerView来实现列表的话就需要自己实现这些功能。本文主要介绍这些通用功能的实现方式,使得RecyclerView使用起来和ListView一样方便。

RecyclerView子View宽度不充满父容器

今天用RecyclerView写了简单的例子,使用的是LinearLyaoutManager,子View采用的TextView,准备写个简单的List展示,我的RecyclerViewTextView的宽度布局都采用的是match_parent,结果显示出来之后发现子View的宽度压根就没有充满屏幕。之前也用过RecyclerView,但是没有遇到过这个问题,很不解啊~~~网上查阅之后说是在AdapteronCreateViewHolder方法中构造View的时候不能用如下方式:

1
View.inflate(mContext, R.layout.item_layout, null);

必须要换成下面的构造方式把parent带进去:

1
LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false);

而我的Adapter中刚好就使用的是第一种方式,于是立马换成下面的第二种方式实现,运行看效果,果然充满了屏幕~~~这个问题还真是奇葩啊~

RecyclerView下拉刷新上拉加载

背景

作为ListViewGridView的替代者, RecyclerView以它的灵活性著称,而且有着更好更完善的缓存处理机制。但是在使用RecyclerVew的过程中有个很明显的问题:RecyclerView没有为开发者提供addHeadViewaddFooterView两个接口,这就为RecyclerView的下拉刷新和上拉加载实现增加了难度,本文就为大家介绍RecyclerView的下拉刷新和上拉加载的实现方式。

AndroidStudio使用技巧

AndroidStudio使用技巧

本文主要是记录从我使用AndroidStudio以来遇到的一些问题和一些技巧。


  1. 初次使用AndroidStudio,第一次创建Android工程编译时会比较慢,这中间涉及到三个过程:
    1. 可能会去下载最新的SDK,所以在创建工程之前可以先将SDK更新完成
    2. AndroidStudio工程会使用gradle构建,因此会联网下载gradle,这个过程比较慢要耐心等待
    3. 下载工程中的一些依赖包,比如junit
  2. 有时候使用AndroidStudio进行rebuild和clean时,会报错如下:Failed to complete gradle execution cause by...,一般此错误可以通过设置gradle的VM参数解决: -Xmx256m(设置方式为:File > Setting > Gradle > Gradle Vm Option),如果此方法无效,可以选择直接升级AS的版本到最新版本再试,还有其他可能的原因是工程JDK版本与AS设置的JDK版本不同
  3. 设置AndroidStudio的不同主题背景: File > Setting > Appearance&Behavior > Appearance 下的Theme可以选择你要使用的主题

UC浏览器首页滑动动画实现

实现效果


RecyclerView绘制原理

RecyclerView基本使用

1
2
3
4
5
6
7
8
9
10
//首先设置RecyclerView的布局管理模式
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new MyAdapter(getData());
//设置Item项的UI装饰器
mRecyclerView.addItemDecoration(new RecyclerItemDecoration(LinearLayoutManager.VERTICAL));
//设置Item项的不同操作的动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//设置数据开始装配
mRecyclerView.setAdapter(mAdapter);
RecyclerView原理分析

基于OkHttp的封装库TigerOkHttp的使用

在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOkHttp)

TigerOKHttp特性

封装之后其支持的功能特性包括如下:

  1. 一般的get同步阻塞请求和异步请求

  2. 一般的post同步阻塞请求和异步请求

  3. 实现了文件上传功能(包含文件上传进度回调显示)

  4. 实现了大文件下载功能,只需要指定文件下载路径即可,也包含了下载进度的回调显示

  5. 实现了请求结果的自动解析,用户也可以根据需求扩展自定义结果解析类

  6. 对所有请求都支持直接将结果解析转换为JavaBean对象或集合

  7. 支持对返回结果结构的自定义,例如设置返回结果结构为:{flag:1|0,error:错误信息,result:请求结果},结果解析的时候会按照此结构进行结果解析

  8. 支持取消某个请求

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×