Android基础之9-Patch(9.PNG)与padding

在上一篇文章记一次9.png的填坑之旅最后,我留了两个个问题:

  1. 为什么使用9.PNG设置背景之后会改变控件的padding属性值
  2. 在我所遇到的问题中9.PNG明明改变的是padding值为什么却产生了margin的效果

这篇文章就来解答这两个问题以及9.PNG使用过程中需要注意的地方。

各位同学如果没看过记一次9.png的填坑之旅这篇文章可以先去看看,因为我下面所讲的内容都是根据这篇文章中的问题来讲的。

查看更多

评论

TextView之SpannableStringBuilder使用总结

最近项目中碰到一个TextView的显示问题,想了各种办法之后,最后还是用SpannableStringBuilder解决的。这篇文章就记录下我的问题的解决过程,同时总结下SpannableStringBuilderTextView中的不同用法。

查看更多

评论

记一次9.png的填坑之旅

最近在项目中进行界面调整时遇到了一个9.PNG图引起的Viewpadding值不正常导致UI显示不符合预期结果的问题。这篇文章就来记录我当时遇到的问题的表现形式,以及如何根据问题找到产生问题的原因,及其最后的解决办法。

查看更多

评论

RxJava学习之基本使用

RxJava现在在Android开发中越来越流行,作为一个Android开发者我也必须紧跟步伐学习学习RxJava,这篇文章就记录了RxJava中我认为比较常用的一些场景。

也给大伙推荐篇比较好的RxJava文章

RxJava基础

大家都知道JDK中提供了观察者模式的实现,它主要两个重要元素:

  • 被观察者 Observable
  • 观察者 Observer

至于Java中观察者模式的使用,大家可以自行Google下。

RxJava中也有两个重要的元素:

  • 被观察者(事件源) Observable
  • 观察者(事件订阅者) Subscriber

因此RxJava的设计看起来也有点类似JDK中的观察者模式,都有被观察者和观察者。
JDK观察者模式中当有操作需要时是由被观察者通知观察者来进行更新操作
RxJava中是由被观察者Observable发出事件给观察者Subscriber接收,然后观察者Subscriber调用noNext()进行处理,直到调用onComplete)()onError()结束

查看更多

评论

透过Retrofit使用看其源码设计模式

前言

这篇文章我将从Retrofit的基本用法出发,透过其使用步骤,一步步的探究Retrofit的实现原理及其源码的设计模式。这篇文章可能会将Retrofit中用到的设计模式和其实现原理穿插着写,所以各位同学也可以选择性的阅读。而对于Retrofit具体使用还不太清楚的同学可以去看的另一篇文章Retrofit2的使用介绍

查看更多

评论

在线视频播放App的实现

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

主要使用的开源库

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

主要功能

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

查看更多

评论

Hexo搭建静态博客

前言

前段时间因为我的WordPress博客进入后台非常慢,严重影响操作使用,再加上服务器时间的限制,所以就讲博客从WordPress迁移到了Hexo上,这篇文章记录下我创建Hexo博客的一些流程步骤。

Hexo

Hexo是一个简单地、轻量地、基于NodeJS的一个静态博客框架,可以方便的生成静态网页托管在github或者是国内的coding.net上

查看更多

评论

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一样方便。

查看更多

评论