自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 电商多规格选择算法

实现效果一维规格实现三维规格选择实现SkuAlgorithm​ SkuAlgorithm一般指代电商项目中商品规格属性选择时根据用户选择的不同规格属性,我们需要计算出其他规格是否可选动态的展示给用户,由此衍生出的Sku算法。​ 举个例子,比如商品A现有四维规格属性颜色:规格id尺寸:规格id重量:规格id套餐:规格id红色:1001S:20015斤:3001套餐一:4001蓝色:1002M:200210斤:3002套餐二:4002套餐三:

2021-01-11 12:29:28 1704 1

原创 RecyclerView曝光埋点

RecyclerView曝光埋点  在做客户端埋点的时候,一般分为三类事件,页面浏览事件,元素点击事件,列表item元素曝光事件。页面浏览事件和元素点击事件在做代码埋点时可以很简单的进行埋点,对列表item元素曝光事件的埋点相对来说就复杂许多。对列表item元素曝光埋点上报需要处理四个问题元素是否可见(开始曝光)元素是否不可见(结束曝光)元素可见区域是否满足曝光认定的条件(eg:很多公司会要求item可见区域超过50%才认为是有效曝光)获取元素对应的曝光数据所以item元素可见、不可见状态

2021-01-11 12:24:38 1272 1

原创 (三)CommonLibrary之图片加载

CommonLibrary(一)CommonLibrary之Retrofit+RxJava网络请求封装(二)CommonLibrary之文件下载国际惯例,先看调用方式//网络图片加载String url = "https://p3.pstatp.com/large/666c00065c746ccf3333";ImageHelper.getDefault().loadImage(this, new

2018-03-02 15:45:15 400

原创 (二)CommonLibrary之文件下载

CommonLibrary(一)CommonLibrary之Retrofit+RxJava网络请求封装上一篇大概说了下CommonLibrary的Retrofit+RxJava网络请求封装,这篇说一下关于文件下载的处理。同样先看调用方式使用的QQ下载地址作为测试NeedWifiOperate.getDefault().networkTypeShouldBeWifi(ne...

2018-02-28 14:58:32 501

原创 (一)CommonLibrary之Retrofit+RxJava网络请求封装

前段时间发布了一个公共库组件CommonLibrary,这里详细介绍下其中的功能。先看调用方式Params params = new Params();params.param("start", start);params.param("count", count);NetworkHelper.getDefault().get(mView, "v2/movie/top250"...

2018-02-27 14:20:51 352

原创 2017年总结

时间飞快,今天是2017年上班的最后一天,在这一年里提升很多,但还有许多不足,还需不断努力。平时公司事不太多的时候就静下心来搞搞技术,看看优秀代码,看过OkHttp,Glide,RxJava等一系列优秀的开源库,虽然不能做到彻底吃透,但也明白了其中的一些东西,对我自身来说是很有裨益的,偶尔会试着封装一些简单库,能够简化开发流程。其间封装了三个库WPViewpager 一个便捷实现导航页...

2018-02-13 14:40:55 178

原创 抽取的Android公共库

闲来无事抽取了一个无关业务的公共库以备以后快速开发,此库还不太完善,还需不断改善使用 Blankj大神的部分工具类 项目地址github 经测试,目前module导入项目中打包会增加apk 1.34M体积此库目前包含有网络请求图片加载文件下载下载进度权限安全操作图片预览三方分享&登录网页加载每个功能组件都有默认实现,helper为入口,直接调用使用...

2018-02-09 17:47:51 969

原创 Android超长图显示控件

先上代码import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapRegionDecoder;import android.graphics.Rect;import android.supp

2018-01-12 17:24:14 977 1

原创 2018.1.5

过度绘制 屏幕上的像素点不止绘制一次。照常理来说,屏幕要显示内容就是在屏幕像素点上绘制像素,但重叠情况会导致在一个屏幕像素点上绘制了多次,这就叫做过度绘制。开启过度绘制调试:adb shell setprop debug.hwui.overdraw show关闭过度绘制调试:adb shell setprop debug.hwui.overdraw false原色:没有过度绘制蓝色:1 次过度绘

2018-01-10 17:25:57 206

原创 音视频

2017.12.21 音视频视频的概念视频其实就是一系列图片的集合,当在一秒内连续展示不小于24张图片时,人眼就会认为是连续的,所以出现了视频效果,这个1秒24张就是帧率,帧率越高,所需要的图片越多,也就越流畅。根据图片内存算法,可知这样的视频体积必然会很大,就延伸出了视频的编码(压缩),解码(解压缩)技术,Codec:编解器压缩去冗余法:将一段连续的相似的图片只取不同的部分保存容器文件容器文件是经

2017-12-29 18:02:28 321

原创 支付宝吱口令的截取

最近支付宝扫码领红包,复制邀请码领红包的活动开展得如火如荼,期间层出不迭一些套路,将自己的支付宝邀请码混杂在一段有趣的文字中,让用户打开支付宝,以此获得奖金,比如这样式的:受朋友之托征婚 女,唐紫,26岁,未婚,上海本地人,身高1米65,体重48公斤,复旦大学毕业。漂亮大方,爱好旅游,健身美体,游泳。目前在上海张江一家中国500强公司任职,工作稳定,年薪50万。上海有2套房,1套在汤臣豪园,一辆特斯

2017-12-27 14:43:57 11730 4

原创 2017.12.25

视频的概念视频其实就是一系列图片的集合,当在一秒内连续展示不小于24张图片时,人眼就会认为是连续的,所以出现了视频效果,这个1秒24张就是帧率,帧率越高,所需要的图片越多,也就越流畅。根据图片内存算法,可知这样的视频体积必然会很大,就延伸出了视频的编码(压缩),解码(解压缩)技术,Codec:编解器压缩去冗余法:将一段连续的相似的图片只取不同的部分保存容器文件容器文件是经过codec编码(压缩)后按

2017-12-26 17:52:19 199

原创 2017.12.20

BlockingQueue阻塞队列,用于并发编程,生产者消费者模式的最佳应用数据结构,避免繁琐的线程等待、唤醒。入列(生产者)判断是否已满,满了则入列线程wait,出列判断是否已空,空了则出列线程wait双端队列(线程不同步),结合队列和栈的数据结构,两端都可插入,取出线程池 四种线程池都是通过ThreadPoolExcutor实现,区分核心线程和最大线程。线程池就是用一堆包装住Thread的W

2017-12-22 11:03:24 177

原创 Android矢量图

Android矢量图制作drawable目录下新建XML文件,以vector作为根节点(width,height,viewportWidth,viewportHeight(这两个是画图形的参考宽高))主要定义path子节点。完成pathData的定义,pathData就是需要画的图形,主要有以下操作符,与Path类使用类似 M:新建起点,参数x,y(M20, 30) L:连接直线,参数x,y(

2017-12-13 16:27:06 452

原创 TabLayout的一些使用

setupWithViewPager()的一些坑在使用setupWithViewPager()进行TabLayout与ViewPager进行绑定时,虽然TabLayout还可以点击,但是原来设置的tab不见了,这可真是奇了怪了,看看TabLayout源码,这个方法到底干了什么。直接进入根源 setPagerAdapter()的populateFromPagerAdapter()方法:

2017-12-11 14:40:56 198

原创 ToolBar的一些使用

Menu弹框在默认情况下会覆盖在ToolBar上,产品可不干了,需要显示在ToolBar下面只需要在style里加上<style name="MenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow"> <item name="overlapAnchor">false</item></style> 然后在ToolBar上引用

2017-12-11 11:10:19 255

原创 使用ARouter遇到的坑

跨模块跳转不能跳转需要被跳转的模块或者说使用了ARouter注解的模块都要加上这个dependencies{ annotationProcessor rootProject.ext.arouterCompiler}和这个defaultConfig{ ...... javaCompileOptions { annotationProcessorOpti

2017-11-30 17:47:13 11718 2

转载 Gson特殊字段解析

有时候服务器不按照套路出牌,返回些关键词做key返回给你解析,这时候就需要用到别名比如{"name":"WP","long":12345}这种json解析为实体类是因为包含Java关键字long导致不能构建实体类解决方法@SerializedName(value = "long")public String longitude;

2017-11-29 11:21:32 1118

原创 Retrofit自定义Converter步骤

一般我们只会用到responseBodyConverter,要对请求体做操作,在拦截器做好吧,当然在拦截器对响应做操作也是可以的,但是要做一堆操作处理响应体读一次后失效的问题。继承Converter.Factory重写responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit);type为泛型的type

2017-11-29 09:35:14 444

原创 OkGo添加公共参数

静态公共参数不会更改的公共参数使用,比如设备信息之类的可以在Application初始化时使用 OkGo.getInstance().addCommonParams(params);添加进入,后续请求时都会携带上这些信息。动态改变的参数我需要上传的是MultipartBody,多文件带参数的上传,一开始我想着使用OkHttp的拦截器来实现,但发现OkGo对Body使用ProgressReques

2017-11-27 14:02:49 2586

原创 ViewPager里Fragment跳转Activity,返回刷新Fragment

2017-10-19 17:29:20 1053

原创 Android设备与账号绑定

最近公司需要做一个需求,将用户账号与设备相绑定,账号只能在绑定的设备上登录,在其他设备上不能登录首先与服务器商量好一个字段用于存放设备的唯一标识,在登录的时候获取设备唯一标识,我采用的是MAC地址和IMEI相组合的方式MAC地址WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.

2017-10-10 20:02:15 3011

原创 NoClassDefFound解决方法

NoClassDefFound网上解决方案一大堆,什么分包加载问题这些,在此不表,记录下我遇到的坑。项目引用第三方arr文件一直报NoClassDefFound,网上解决方案都试过无果,最后发现是第三方文件引用的库没有添加到我项目的依赖中,找出第三方arr文件引用的库,添加依赖到自己项目的gradle文件里即可解决。

2017-08-21 17:04:17 9223

原创 V-Layout

详细使用请见这里,我只是做一个简单的概括以方便我自己以后使用。V-Layout  V-Layout是阿里巴巴的开源的用于快速实现组合式布局的UI框架,应用场景多在需要根据需求变化响应不同的组合布局,对于列表界面显示需要时不时变化的很实用,电商类App,服务类App,是将长列表的Item根据需求来以不同的布局方式进行组合,可以根据服务器返回不同的数据来进行布局的改变。  V-Layout里将布局分为卡

2017-05-15 22:25:39 420

原创 关于即时强制下线的实现

即时强制下线这个功能一般是用在当用户使用设备A登录后,又用设备B登录这个用户的账号,设备A上的客户端强制当前用户下线。   逻辑图如下:   逻辑图解释:核心(用户只要进行登录操作或者更改密码操作都更改这个用户的Token)当用户使用设备进行登录时,登录成功后更改用户的Token,并将这个Token返回给客户端,客户端将这个Token存储到本地,在这个用户的以后的访问的时候都带上这个Toke

2017-05-05 23:33:15 2141 1

原创 Builder设计模式

应用场景Builder设计模式有很多地方都有应用,在Android中Dialog就是采用的Builder设计模式,那么在我们的开发中主要的应用场景有哪些呢?参数很多参数可选 有些参数不是必须的需要有良好的代码阅读性实现方式建造者模式常采用内部类的方式编写,这有利于实现链式编程,可阅读性强。下面举一个简单的例子来说明。 我们需要生产一个水杯,水杯必须有的是杯身,不必须有的是杯盖,花纹。就这三

2017-05-05 16:45:50 231

原创 Java虚拟机方法的执行过程简述

首先Java虚拟机在执行方法涉及三块区域,堆区,栈区,方法区。public class Foo{ public int add(int a,int b){ return a + b; }}Foo foo = new Foo();foo.add(1,3);以上面的例子来说,Java虚拟机会首先将这个Foo类的字节码加载到方法区还会在栈区开辟一个栈帧,然后new关键字

2017-05-04 22:49:22 2073

原创 JDK8 lambda表达式

JDK8已经出来一段时间了,在此讲讲lambda表达式,lambda表达式可以理解为是对匿名对象的简化使用,可以将lambda表达式作为参数(这里的参数其实是一种接口类型)传递给方法,那在了解lambda表达式之前需要了解下什么是函数式接口?官方定义为:函数式接口是只含有一个抽象方法的普通接口,细心的朋友可能发现了在这里说到了抽象方法,那就有疑问了,接口里不都是抽象方法吗?为什么要刻意的提一下,确实

2017-05-03 22:40:06 725

原创 Android MVP+RxJava+retrofit 小案例

上一篇讲了下MVP模式,今天就MVP模式写了个小Demo,融合了时下流行了响应式编程RxJava,加上Retrofit (因为retrofit 这个网络请求框架直接就支持RxJava),不了解这两个的建议去学习下。    先看目录结构。        和上一篇讲的基本相同,主要分为Model,Presenter,View    本例用的豆瓣top250为数据。    运行流程:

2017-04-29 21:41:03 740

原创 MVP模式的理解

MVP分为Model,View,Presenter分别对应模型层(实体模型,业务逻辑),视图层(activity,fragment),P层(连接模型层与视图层,控制交互)1.模型层除去bean对象外定义业务逻辑接口,生成业务逻辑实例,主要根据需要处理的逻辑生成接口,eg:在一个登录页面,模型层的接口拥有login()方法。在一个数据库读取操作,接口就拥有readDB()。2.这点需要与下一

2017-04-26 20:20:11 1036

原创 Android转场动画的学习

在5.0以前activity之间的跳转使用overridePendingTransition来实现转场动画,效果其实也可以,但是与5.0推出的转场动画比起,就有点过家家了。使用转场动画步骤很简单,首先要在主题加上这么个属性"android:windowContentTransitions">true,然后在startActivity的代码中加上ActivityOptions.makeScene

2017-04-21 20:59:07 515

原创 DataBinding的使用

什么是DataBinding?  DataBinding是将数据与布局进行绑定的框架,如果做过小程序开发的更好理解这个概念。使用步骤,只需要在moudle的gradle文件的android节点下加入dataBinding {enabled = true}即可使用,然后新增一个布局文件如下例:    >                        name="stu"

2017-04-20 15:04:41 259

原创 JAVA部分重构流程,持续更新...

对于JAVA代码重复部分的重构

2017-03-04 22:39:30 460

原创 Android微信登录,在自有登录系统上集成。

微信登录的集成网上已经有很多攻略了,照着做就没问题了,最需要注意的就是签名,编译器会默认有一个签名的,与正式发布时的签名不一样,靠谱点的做法就是,下载微信的签名查看工具,将你的应用安装到手机上,打开签名查看工具,输入你应用的包名,获得的就是你当前应用的签名,将这个得到的签名填入微信获得appid,如果不大懂默认签名和发布签名的,只需要记得在提交需要发布的apk到应用商城前,将这个apk安装在手机上

2016-11-26 22:16:35 417

转载 方法数超出64K限制错误

当一个项目中依赖了太多的类库就会出现这个异常,这是因为项目中引用了太多的方法导致打包时 Dalvik Executable (DEX) 文件中的方法数超过了 65536 的限制引起的。  解决方法  Android Studio 允许用户通过 Gradle 的设置来使用多个 DEX 文件,这样每个文件中的方法数就会减少,也就可以绕过这个限制,该方法分为两步进行:  修改 build.g

2016-11-11 21:35:32 1161

原创 《Clean Code》读后总结

1.关于命名需要名副其实,标准就是你根本不需要再为变量添加注释。命名规则,类名,变量名尽量用名词,方法名用动词,别做无意义的命名,如果多个变量具有相同的前缀,请考虑封装成类,别做容易让人混淆概念的命名。不要怕长名字,如果一个长名字能让你更清晰的明白它的含义,尽管用它吧。2.关于方法请记住一条准则,短或者更短。一个方法的职责是做一件事,并且只做一件事,检查准则是:看能否再拆出一个方法,一个方法里

2016-11-08 21:12:49 938

原创 为ViewPager便捷设置网络或者本地图片

前段时间心血来潮,想封装一个类库,封装好了又没时间写博客,今天分享出来,主要就是为了更方便的使用ViewPager设置图片。                      github:https://github.com/wp529/WPViewpager  类库介绍:一行代码快速实现ViewPager加载图片 网络和本地图片 可设置轮询 轮询间隔时间 触摸时取消轮询 抬起继续轮询 导航小点

2016-11-05 15:22:02 329

转载 自定义View来显示gif格式图片

Android本身不支持显示gif格式图片,可以自定义view来实现。

2016-10-05 22:55:44 361

原创 setLayoutParams()不生效问题

1.使用此方法时必须是使用该控件的父布局        android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">            android:layout_width="wrap_content"     

2016-09-28 22:38:56 11396 2

转载 使用ObjectAnimator时遇到的一些问题

首先是在使用旋转动画时默认基于控件中心旋转 解决办法:设置控件的瞄点 iv.setPivotX(0.0f); iv.setPivotY(0.0f);  //这是基于控件左上角  ObjectAnimator可以执行一系列同一属性动画的操作,在ObjectAnimator.ofFloat();  //可变参数 values里可以设置动画执行路径  AnimatorSet可以控制多个动画的执行

2016-09-03 16:22:07 2674

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除