互联网开发经验
文章平均质量分 62
Danny_姜
分享是一种精神, 你可以分享他人成果也可以将自己的成果分享给其他人, 不论哪一种分享, 都会有所收获
展开
-
作为一个32岁工程师,我已不再焦虑。你呢?
故事总得有个开头"嗡~嗡!"手机震动了两声,应该是一条短信通知,顺手拿起手机撇了一眼What ? 眼睛一闭一睁《Android进阶课程》已经更新到第18篇了!人生第326...原创 2020-05-25 12:03:44 · 1205 阅读 · 1 评论 -
关于Audio你应该知道的一点知识
PCM(Pulse Code Modulation—-脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录。PCM信号是由[1]、[0]等符号构成的数字信号。与模拟信号比,它不易受传送系统的杂波及失真的影响。动态范围宽,可得到音质相当好的影响效果。PCM轨迹与视频轨迹不同,故也可用于后期录音RIFF全称为资源互换文件格式(ResourcesInterchange F原创 2017-12-07 22:13:41 · 2314 阅读 · 0 评论 -
Dagger2 大全
虽然项目中一直在使用MVP + Dagger2 的架构设计。 但是一直到最近才有心思去看一下这个Dagger2究竟是一个什么东东, 一番折腾下来之后感觉还是有一些收获, 索性撸一系列 也当做是一个总结此系列文章的思路可以分为以下几个:Dagger2 什么鬼 ??Dagger2 初体验Dagger2初体验的一点思考与实践Dagger2 进阶Dagger2 总结原创 2017-08-31 15:38:53 · 641 阅读 · 0 评论 -
Dagger2 总结
Dagger 就是现在一个比较火的依赖注入器框架。它使用的预编译期间生成代码完成依赖,而不是用的反射。这一点很重要,正因为这点它并不会造成运行时效率低下,只是增加了一点编译的负担。Dagger 用法非常灵活,有太多的注解需要学习。但是Inject,Component,Module,Provides是dagger中的最基础最核心的知识点。奠定了dagger2的整个依赖注入框架。所以学习Dagger时,原创 2017-09-08 10:18:22 · 829 阅读 · 0 评论 -
Android TextView去掉paddingTop和paddingBottom
最近项目中需要用libgdx渲染一个Android的TextView, 但是绘制出来的TextView总是默认带有paddingTop和paddingBottom, 如下图所示: 网上有很多解决方案,例如在xml中设置如下属性:android:lineSpacingMultiplier="0.8"android:includeFontPadding="false"或者设置margin为负值等等。原创 2017-08-28 11:30:07 · 3579 阅读 · 1 评论 -
Dagger2初体验的一点思考与实践
上一篇介绍了如何简单使用Dagger2,主要介绍了@Inject注解和@Component注解。再来重新理一下使用流程:在MainActivity中使用@Inject注解变量User在User.java的构造器中添加@Inject注解创建类UserComponent并使用@Component注解此类在UserComponent中添加bind(MainActivity activity)方法原创 2017-09-05 11:05:09 · 1355 阅读 · 3 评论 -
Dagger2 初体验
上一篇了解了Dagger是什么东西,以及使用它的优点。 接下来就来写个最简单的demo试试水。先来看下在不使用Dagger的情况下, 在一个Activity中使用User bean类的方式,很简单如下所示:User.java/** * Created by Danny on 17/8/30. */public class User { private String name; pri原创 2017-09-04 17:48:16 · 904 阅读 · 2 评论 -
Dagger2 什么鬼 ?
注意:此篇文章完全是理论知识楔子在深入了解Dagger之前, 需要对以下2个概念有所理解依赖注入: 就是目标类(目标类需要进行依赖初始化的类,下面都会用目标类一词来指代)中所依赖的其他的类的初始化过程,不是通过手动编码的方式创建,而是通过技术手段可以把其他的类的已经初始化好的实例自动注入到目标类中java注解(Annotation): Annotation(注解)是JDK1.5及以后版本引入原创 2017-09-04 10:26:33 · 710 阅读 · 1 评论 -
Libgdx中ScrollPane和Actor事件冲突问题的解决方案
在Libgdx的使用过程中,经常会用到ScrollPane这个widget,来实现滑动效果, 如下所示: 但是如果想在上面的效果上添加一点扩展,比如ScrollPane中的Actor可以从ScrollPane中移出来,并添加到Stage中,则需要添加额外的逻辑具体代码参考如下:/** * Created by Danny.姜 on 17/7/26. */public class TestAda原创 2017-07-27 11:56:05 · 1156 阅读 · 0 评论 -
ImageView屏幕适配一点新的心得
1 在res中的dpi、xhdpi、xxhdpi中分别放入UI设计的响应大小的图片2 尽量使用RelativeLayout以上几步可以做到ImagView位置的屏幕适配,但是Android设备有很多是屏幕大小一样,但是density不一样的,也就会造成在有些相同大小的屏幕上,有些图片大而有些图片非常小3 针对Size在各个屏幕density不一的情况,可以先获取screen width、height原创 2017-07-31 11:41:33 · 1148 阅读 · 0 评论 -
GreenDao保存List<String>类型数据
**在上一章中介绍了如何简单使用GreenDao,并创建了User类来保存一些简单的数据。 但是假如在User中有一种List类型的数据也需要保存到数据库中,该如何处理呢??**答案很简单,可以转换一下思路,遍历List数据,然后将所有的String对象都append到一个StringBuilder中,然后保存在数据库中即可。 事实上,GreenDao已经为我们考虑到了这种情况,因此才有了 Pr原创 2017-06-21 11:12:17 · 11543 阅读 · 6 评论 -
GreenDao的简单实用
GreenDao使用步骤1 引入GreenDao先在project的build.gradle中引入GreenDao支持插件buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.原创 2017-06-21 10:20:15 · 839 阅读 · 0 评论 -
Mac安装Meld,并使用Meld作为git merge tool的工具
以前在Mac上安装Meld时,需要使用brew,安装brew使用如下命令:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装好brew之后,使用brew安装Meld。 网上大多数人都说使用以下命令安装Meldbrew install meld但是运行上面命令,会弹出以下原创 2017-04-25 18:32:15 · 9671 阅读 · 2 评论 -
Android屏幕适配的一点新的心得
最近在做项目的过程中又开始了万年不变的屏幕适配。正好也借着这个机会重新温故了一下Android屏幕适配的一些小窍门,不想竟然有了点新的心得,所以赶紧挽起袖子撸一篇以免明天就忘记了…首先需要声明一下此篇文章可能并不会适合所有的屏幕适配。因为UI designer(注意是designer, 否则她们会生气的)只会给我们一套最高分辨率下的图片,剩下的完全交给我们Android工程师来做了。这就造成了两个比原创 2017-11-30 09:52:24 · 388 阅读 · 2 评论 -
RIFF文件是什么
RIFF全称为资源互换文件格式(ResourcesInterchange FileFormat),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括: 音频视频交错格式数据(.AVI) 波形格式数据(.WAV) 位图格式数据(.RDI) MIDI格式数据(.RMI) 调色板格式(.PAL)原创 2017-12-07 22:14:20 · 3150 阅读 · 0 评论 -
是否应该对private的方法写UnitTest code
最近在写UnitTest代码的时候遇到了点小问题,在解决过程当中有了点小心得,做一下记录。 完整代码在此处下载: https://download.csdn.net/download/zxm317122667/10652780问题主要对于 private 方法的单元测试。比如如下代码:有两个类,分别是Fish和Rod 鱼Fish.javapackage com.example....原创 2018-09-07 19:36:46 · 1309 阅读 · 0 评论 -
自定义ViewPager实现仿 "多邻国" 的闪卡效果
原文链接: https://rubensousa.github.io/2016/08/viewpagercards (在原文的基础上,为了便于理解,添加了一点自己的理解)如果你使用过 Duolingo (多邻国免费学习英语), 那你很有可能看到过下面这种界面效果: 看起来相当的酷对不对? 鉴于效果不错并且使用场景很多,因此我决定开始仿照它做一个类似的 Sample首先分析一下这个效果...翻译 2018-04-16 10:34:34 · 1296 阅读 · 0 评论 -
android中将Mockito和GreenDao结合使用
上篇文章介绍了几种使用Mockito访问resources中的json数据,并通过Gson转化为Object进行Mock test的操作。在此基础上,我们可以将请求到的数据通过GreenDao保存到数据库中,并对数据库进行模拟测试。build.gradle中添加如下依赖testCompile 'org.robolectric:robolectric:3.1'testCompile原创 2018-01-10 10:25:28 · 485 阅读 · 0 评论 -
Android使用Mockito访问resources中的文件
背景在我们使用Mockito写Unit Test代码的时候,经常需要造各种mock数据。但是有些情况我们需要mock的数据很大并且复杂。手动造数据的方式就不太适合了,可以考虑换一种思路思路在平时开发是,我们经常是从后端(backend)发送请求,拿到json数据之后展示到界面(UI)上。介于此操作上,我们完全可以在数据请求时,将backend返回的json数据保存在本地的一个Fil原创 2018-01-10 10:02:04 · 1053 阅读 · 0 评论 -
Mockito使用中遇到的问题
使用GreenDao时报NullPointerException解决办法:在类中添加RunWith注解:@RunWith(RobolectricGradleTestRunner.class)@Config(constants = BuildConfig.class, sdk = 16)Multi dex installation failedjava.lang.Runtime原创 2018-01-10 11:03:16 · 1896 阅读 · 0 评论 -
Mockito 其他使用
上篇文章介绍了几种使用Mockito书写Unit Test code的场景原创 2018-01-09 18:07:42 · 461 阅读 · 0 评论 -
Mockito 简单使用
验证行为@Test public void verify_behaviour(){ //模拟创建一个List对象 List mock = mock(List.class); //使用mock的对象 mock.add(1); mock.clear(); //验证add(1)和clear()行为是否发生 ver原创 2018-01-09 17:41:46 · 491 阅读 · 0 评论 -
将Html的tag标签使用OpenGL渲染到Texture中实例
/** * transform a Html tag String to Texture * * @param htmlString the html tag String like * "italic bold italic+bold italic+bold+un" * @param textSize d原创 2018-01-24 12:21:16 · 541 阅读 · 0 评论 -
OpenGL如何设置抗锯齿
Texture mapping is a technique that applies an image onto an object’s surface as if the image were a decal or cellophane shrink-wrap. The image is created in texture space, with an (s, t) coordinate s原创 2018-01-24 12:22:59 · 1492 阅读 · 0 评论 -
Mockito + Robolectrie + RxJava 测试MVP架构项目
前言如果你在网上搜 哪种项目架构更好 的时候, 会看到成百上千的博客对各种架构解释优缺点。 但是不幸的是大多数文章都没有提到非常重要的一点: 单元测试 在我们选择某一种项目架构的时候,起决定性因素的无非是个人喜好或者项目需求。我并不认为 MVP 架构比 MVVM 架构更好,或者说 MVP 架构就是一种完美的客户解决方案。让我决定使用 MVP 架构的唯一理由就是它的 简洁性MVP原创 2018-01-12 11:51:19 · 770 阅读 · 0 评论 -
Android使用SVG的一点小坑
最近公司的UI突发奇想的又给了我们Android团队几张SVG的图片,让我们显示在某页面上。经过部门同事的一番努力最终还是将他们显示在屏幕上了。 但是还是有几个小问题1 UI给的SVG图片应该显示的是白色,但是在Android设备上显示的确实黑色2 在某些手机上SVG会出现锯齿,给用户造成的感觉就是字体style都不一样问题的原因就是我的同事是直接在将AS中将SVG转化为VectorD原创 2017-11-30 10:07:49 · 6368 阅读 · 0 评论 -
SimpleCommand(四) 上传文件/视频功能
上传文件的核心功能主要是在UploadCommand.java中实现使用步骤:1 创建UploadCommand的构建类BuilderUploadCommand.Builder builder = new UploadCommand.Builder();2 通过构建类设置UploadCommand的各种属性builder.domain("上传地址的域名") .pat原创 2017-03-15 13:42:20 · 922 阅读 · 0 评论 -
SimpleCommand(二) 图片下载
框架github地址: SimpleCommand框架简介:SimpleCommand是一款轻量级框架。框架很小也很容易理解。使用这款框架能实现的功能主要是快速集成网络请求、图片请求、文件操作等各种比较耗时的操作。对于网络图图片请求,内部使用的是OkHttp实现使用场景:此框架并不适合于短时间内有大量请求的场景,比较适合于并发执行4~6个异步请求工程目录介绍:在SimpleCommand整个工程目录原创 2017-03-15 13:33:37 · 837 阅读 · 0 评论 -
SimpleCommand(三) ImageLoader API详细介绍
框架github地址: SimpleCommand框架ImageLoader API 详细介绍在ImageLoader中有以下几个不同的构造器:/** * 注意: 次构造器不支持下载进度提示功能 * @param context * @param withCache 是否支持缓存 * false--不带缓存 *原创 2017-03-15 13:41:26 · 729 阅读 · 0 评论 -
Vitamio如何设置全屏效果
Vitamio是一个三方的视频播放框架,它实现的效果同Android自带的VideoView实现的效果比较类似,可以实现播放本地视频和网络流媒体视频。基本使用方法可以参考江南一点雨(专家)的博客:玩转Android之在线视频播放控件Vitamio的使用这篇文章对Vitamio的使用不做介绍,重点说一下Vitamio使用过程的一个bug:当在xml文件中设置VideoView原创 2016-06-07 13:10:14 · 6436 阅读 · 0 评论 -
Android合理的使用闪屏
说起闪屏就会莫名的引爆我的小暴脾气,为什么这么说呢? 每次启动一个App我都要盯着手机屏幕傻不拉几的待上几秒钟,即使我知道了这个App的功能到底是TMD是做什么的。因此从内心深处,我对闪屏是抵触的。我知道我打开的是什么该死的APP,我也知道用它来干嘛,求求你只要让我用它就行 OKay??好,吐槽完毕之后,让我们来看看谷歌对闪屏是抱什么态度:Material Design:Launc原创 2016-03-28 20:53:58 · 4804 阅读 · 0 评论 -
Activity does not have a parent activity name specified.
如上图所示:当点击红框中的箭头,调用系统方法NavUtile.navigateUpFromSameTask(this); APP直接崩溃错误信息:Activity SubActivity does not have a parent activity name specified. (Did you forget to add the android.support.PARENT_ACTI原创 2016-03-26 11:03:30 · 1115 阅读 · 0 评论 -
You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法
当我的MainActivity继承自v7包中的ActionBarActivity或者AppCompatActivity时,如果在style.xml文件中指定MainActivity所使用的样式如下: @color/colorPrimary @color/colorPrimaryDark原创 2016-03-25 23:40:53 · 28850 阅读 · 5 评论 -
原生代码加载网络图片和Volley和Picasso的简单介绍和优缺点对比
网路下载图片,并以滚动列表的方式展示图片资源,是一种典型的Android App开发场景,但是如何更好的去实现这种效果一直是Android程序员所头疼的事情。比如,将下载的图片数据存储到本地,那就会造成一个原声Android代码的卡顿(IO流的操作会造成裂变滚动的卡顿)。如果将他们存储在网络断,那程序员又必须去关心何时要取消请求队列中的请求,如何将下载的图片数据在内存中做高效的缓存,以及一系列的问原创 2016-03-25 10:23:39 · 2114 阅读 · 0 评论 -
Android自定义Button结合PopupWindow和ListView实现顺序显示下拉菜单控件
废话不多说,直接上效果图:实现效果描述:点击按钮之后,会在按钮下方弹出下拉菜单,并且下拉菜单的内容一依次显示到屏幕之上实现思路:1、首先要解决按钮的样式问题, 可以使用指定背景为shape2、接下来点击按钮时,需要在按钮的下方弹出相应的视图View(比如上图中的一个ListView)3、最后解决如何依次播放ListView中的每一个item的内容原创 2016-03-19 11:55:43 · 4706 阅读 · 1 评论 -
Android在ScrollView中嵌套ViewPager以及ListView的可能出现的问题以及解决方案
我们在实际开发一个款Android App时,经常会遇到如下图所示的需求:从上面gif图片可以看出,在一个页面的最上方有一个首页轮播的效果,在首页轮播的下方又会有一个ListView或者是GridView来显示我们的网络请求数据。对于上述需求,我们很容易想到先使用ViewPager的来实现首页轮播的效果,然后在下方添加一个ListView或者GridView并将数据通过自定原创 2016-03-17 18:14:58 · 9389 阅读 · 16 评论 -
Volley二次封装,实现网络请求缓存
Android目前很多同学使用Volley请求网络数据,但是Volley没有对请求过得数据进行缓存,因此需要我们自己手动缓存。 一下就是我的一种思路,仅供参考NetWorkHelper---对Volley的封装,首先调用CacheManager.get(methodName, params);方法获取缓存中的数据,如果数据为null,则继续发送网络请求。/** * @v原创 2015-11-04 11:13:16 · 5264 阅读 · 1 评论 -
自定义ViewGroup实现仿淘宝的商品详情页
最近公司在新版本上有一个需要, 要在首页添加一个滑动效果, 具体就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 如下图 X东的商品详情页,如果用户继续向上拉的话就进入商品图文描述界面:刚开始想拿来主义,直接从网上找个现成的demo来用, 但是网上无一例外的答案都特别统一: 几乎全部是ScrollView中再套两个ScrollView,或者是一个LinearLay原创 2015-07-23 14:28:45 · 32807 阅读 · 74 评论 -
自定义ImageView,实现点击之后算出点击的是身体的哪个部位
最近也是因为项目的原因,所以有机会接触到这边的算法。 此文重点不是如何实现的思路和原理, 有需要的同事可以借鉴一下废话不多说,直接上代码:public class MyImage extends ImageView { private DisplayMetrics dm; private int bodyImageViewHeight = 0; private原创 2015-08-13 16:02:08 · 4231 阅读 · 2 评论 -
Xutils HttpUtils上传文件的实现
移动开发处理网络上传文件时经常使用xUtils这个库。xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分原创 2015-06-04 21:12:00 · 50240 阅读 · 13 评论