自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dashen的博客

失败是注定的,成功只是偶然

  • 博客(89)
  • 资源 (9)
  • 收藏
  • 关注

原创 无需自定义View,彻底放弃shape,selector吧

前言作为一个android程序员,对于shape、selector这两个标签一定不陌生。每当UI设计师给我们设计出一个个button背景的时候,我们就需要去drawable文件夹下去新建一个bg_xxx.xml,然后很多时候区别仅仅是一个边框的颜色或者填充的颜色。这就导致了很多非常相似的.xml文件产生。 网上之前也有了一种通过自定义View,在xml中通过设置属性达到shape效果...

2018-09-11 00:28:13 1424 2

原创 android基于libjpeg-turbo的图片压缩框架

Light a lightweight image compress framework for Android based on libJpeg. 一个基于libJpeg的压缩图片框架, 支持配合rxjava使用。 可以一行代码解决图片下载->压缩->显示的过程。demo效果先展示一下压缩前后的效果对比,以及文件大小和占用内存的大小 demo比较简单,运行的时候请打开s

2018-01-26 16:47:49 1895

原创 仿微信长按菜单

FloatMenuA menu style pop-up window that mimics WeChat。仿微信的长按菜单。效果如下引入方法:dependencies { .... compile 'com.noober.floatmenu:common:1.0.2'}使用说明使用方法1: Activity 重写dispatchTouchEvent,并且新建一个P

2017-12-21 18:19:58 3543

原创 Android 一个轻量级的自动恢复内存数据框架

通过简单的接入代码自动对Activity 或者Fragment进行内存恢复操作

2017-12-14 17:58:26 1086

原创 Android图片压缩,自己编译libjpeg

之前的博客提到过关于图片压缩的方法: Android 图片压缩,Bitmap优化Android原生的压缩方法,不在乎两种:通过设置simpleSize根据图片尺寸压缩图片;通过Bitmap.compress方法通过压缩图片质量,去压缩。但是我们当我们对图片质量和图片文件大小同时存在要求时,我们发现无论怎么去设置参数,我们所做的效果总是不能尽如人意,而且同样大小的图片,效果却总是比iOS

2016-12-26 19:50:00 8150 10

原创 对Android进程守护、闹钟后台被杀死的研究

最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。但是,我们知道,android系统很坑爹,不同的厂商对rom的定制,导致对进程的管理都不太相同,但是如何做到在各个手机上都能一直保持后台执行呢?。为了解决这个问题,特地去研究了各种保持进程不被杀死的方法。下面对几种常见的用法进行了分析,并且给出了我自己发现的一个保持进程运行的

2016-10-11 20:20:42 18239 18

原创 解决mFactorySet在Android Q中被非SDK接口限制的问题

mFactorySet问题由来mFactorySet这个值如果熟悉的同学一定知道,通常我们在使用换肤框架的时候,需要使用我们自定义的LayoutInflater.Factory类,这时候就需要调用LayoutInflater的setFactory方法。而我之前编写的一个基于Factory去给原生控件增加shapre xml属性的框架也是同样的原理(无需自定义View,彻底解放shape,sele...

2019-08-23 11:01:53 2056 9

原创 DSL形式的基于retorfit、协程的网络请求封装

前言协程正式版出来已经有一段时间,相对于线程,协程占用更小的资源同时也可以更加方便的进行各个线程的切换。从retrofit2.6.0开始,retrofit直接可以支持哦诶和协程的使用。那么接下来就给大家展示一下如何快速封装一个基于协程的dsl形式的请求方法。文章内容以目前较为常用的mvp架构为例。封装后的请求方式/** * 打印结果如下: * * MainPresenter: st...

2019-08-06 16:19:59 946

原创 java kotlin解析2018-12-28T09:17:30.875+0000这种类型的时间

fun praseTime(time: String): String { val df = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ", Locale.CHINA) val result: Date result = df.parse(time) val sdf = SimpleDateFormat("yyyy-MM...

2019-01-16 10:46:40 486

原创 android权限判断时shouldShowRequestPermissionRationale的使用

shouldShowRequestPermissionRationale用于处理用户勾选下次不再询问的权限情况:如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don’t ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false操作结果第一次打开App时false勾选“下次不在询问”true...

2018-11-23 14:50:46 847

原创 安卓apk一键反编译工具

安卓apk反编译工具,一键反编译AndroidMainfest.xml layout res等资源以及class文件使用效果使用方法1:复制apk文件到android-apk-decompile所在目录 2:windows:直接把apk文件拖入bat即可 mac:执行shell脚本 sh /Users/xxxx/android-apk-decompile/decompile.s...

2018-11-21 14:09:08 2958

原创 IdleHandler优化Activity启动时间

IdleHandler是主线程在开始加载页面完成后调用的方法,可以提高性能:@Override protected void onResume() { super.onResume(); Looper.myQueue().addIdleHandler(() -> { initializeData(); return false; ...

2018-11-14 10:59:28 1101

原创 android studio 3.1.2以上查看app的控件布局

使用uiautomatorviewer即可。 路径是/Users/xiaoqi/Library/Android/sdk/tools/bin/uiautomatorviewer

2018-09-05 16:35:53 5820

原创 Android 常用换肤方式以及原理分析

Android 换肤常用方法1.通过Theme切换主题通过在setContentView之前设置Theme实现主题切换。 在styles.xml定义一个夜间主题和白天主题:<style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="color...

2018-09-05 13:49:01 2529

原创 判断textview是否变成两行

TextView tv2 = (TextView) findViewById(R.id.tv2); ViewTreeObserver vto2 = tv1.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { ...

2018-07-18 15:07:30 2682

原创 ARouter there's no route matched解决方法

原因ARouter是一个组件化开发常用的一个路由框架,它可以很方便的让我们进行组件之间的跳转。但是随着module的增多我们很容易出现there’s no route matched的错误,出现这种问题会让我们在开发的时候很麻烦,却又没有报错的日志让我们查看。 在百度了很多之后发现网上的方法都不能解决我的问题,于是通过简单的源码阅读,找到了问题所在。#分析Aouter的具体使用便不再...

2018-06-11 14:40:02 30053 7

原创 通过aspectj对Android数据统计的简单实现

功能需求一个项目实现之后,我们并不知道用户对某个部分的使用频率是对少,为了更好的来对项目各个功能的使用统计,我们需要做一些数据埋点的功能,也就是每当用户点击按钮的时候,都对这次点击进行保存处理,然后再之后统一上传到服务器,进行数据分析。实现思路条件假如,当前有两个方法进行数据埋点:登录和注册。 功能表的数据结构如下:功能id、操作次数、操作人id。 public c...

2018-03-21 14:55:02 1107 1

原创 android 获取视频某一时间的帧,并获取bitmap

方法如下,注意单位是微秒us MediaMetadataRetriever mmr = new MediaMetadataRetriever(); mmr.setDataSource(mp4Path); //获取第一帧图像的bitmap对象 单位是微秒 Bitmap bitmap=mmr.getFrameAtTime(30 * 1000 * 1000);

2018-01-18 13:17:18 10961

原创 android 使用mediaplayer播放视频的时候设置请求头header

很简单,使用如下代码就行 Uri uri = Uri.parse("http://47.96.22.18:8002/test.pg1"); Map headers = new HashMap<>(); headers.put("sencoder", "hevc"); Map headers = new HashMap(); headers.put("U

2018-01-18 13:14:44 5506

原创 使用MediaCodec硬解码h.265视频及音频进行播放

h.265这个视频是很多播放器不支持的,就算是bilibili开源的ijkplayer也不能直接播放,需要自己去重新编译 才可以支持。 这里通过这个demo来演示一下如何硬解码视频,播放h.265视频,其实编码的视频同样道理。视频的播放主要在surfaceView中显示,而解码过程则在音频解码线程和视频解码线程两个线程中分别执行。视频解码主要是用到了一个MediaCodec这个类来

2018-01-06 17:56:17 16947 4

原创 android 本地切割文件

public static void splitFile(String path, int length, ListFile> list) throws IOException{ InputStream is = new FileInputStream(path); int len=0; byte[] buff = new byte[length]; int i =

2017-12-21 16:02:10 900

原创 rxjava2 + retrofit上传文件示例

service请求参数:ApiService:@Multipart@POST("/api/chunkupload/upload")ObservableResponseUploadFileModel>> fileUpload(@Part(value = "key") String key, @Part() MultipartBody.Part file);请求过程

2017-12-21 15:56:47 3234

原创 android 模拟器INSTALL_FAILED-NO_MATCHING_ABIS:Failed to extract native libraries,res=-113

一般在android模拟器上运行的时候会遇到这个问题,解决方法1、增加缺少的so文件    如果是缺少x86的so文件,则把x86的so文件加入即可,其他也一样。2、使用arm架构的模拟器    在创建模拟器的时候使用arm的cpu架构3、在app的gralde中加入android { ... defaultConfig { ...

2017-12-09 13:56:39 648

原创 android插件化框架-Replugin

Replugin是360开源的一款插件化框架,同样过多的资料就不在这展现了,github上有最完整的官网介绍。github地址:https://github.com/DroidPluginTeam/DroidPlugin宿主接入工作project的gradle中加入:classpath'com.qihoo360.replugin:replugin-host-gradle

2017-11-20 14:28:10 1011

原创 android插件化框架-VirtualApk

首先奉上Virtualapk 的github地址:https://github.com/didi/VirtualAPKVirtualAPK是滴滴出行自研的一款优秀的插件化框架,它的介绍这里就不说了,自行查看wiki文档,这里只给出最基础的接入方法以及注意点:宿主程序(主app):首先project的gradle中添加:classpath 'com.didi.virtuala

2017-11-11 14:56:07 823

转载 JAVA的深拷贝与浅拷贝

http://www.jb51.net/article/48201.htm如何选择  如果对象的属性全是基本类型的,那么可以使用浅拷贝,但是如果对象有引用属性,那就要基于具体的需求来选择浅拷贝还是深拷贝。我的意思是如果对象引用任何时候都不会被改变,那么没必要使用深拷贝,只需要使用浅拷贝就行了。如果对象引用经常改变,那么就要使用深拷贝。没有一成不变的规则,一切都取决于具体需求。

2017-10-11 16:49:34 209

原创 android checkSelfPermission方法使用注意

当编译targetSDKVersion < 23时使用ContextCompat.checkSelfPermission and Context.checkSelfPermission将会不起作用

2017-09-20 11:37:57 24945 2

原创 通过反射生成JSON字符串,以及解析JSON字符串到对象

/** * Created by xiaoqi on 2017/7/19. */public class JSONUtils { public static String ObjToJson(Object obj) { String json = ""; if (obj != null) { StringBuffer sb = new St

2017-07-25 11:32:31 879

原创 Android跳转到系统通讯录新增和修改联系人

新增联系人:Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);intent.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, name);intent.putExtra(android

2017-06-20 11:36:35 3326

原创 判断Android 当前版本是否为debug版本

private static boolean isDebugVersion(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catc

2017-04-11 14:45:24 3947

原创 万能RecyclerViewAdapter

很早之前,看到zhy写的万能ListViewAdapter,并且写了篇博客万能Adapter。现在RecyclerView已经逐渐替代了ListView。而RecyclerView的Adapter写起来又比ListView的Adapter要复杂一些,于是我边仿照之前,写了一个RecyclerView的万能Adapter。使用方法:public class MainA

2017-03-02 23:25:43 444

原创 一个可以自动调用OnSaveInstanceState保存并恢复数据的框架

最新的文档地址http://blog.csdn.net/qq_25412055/article/details/78805525我们开发app的时候,都会遇到一个问题,当我们的app长时间切到后台,或者一些不在栈顶的页面,当我们重新进入的时候,这个Activity或者Fragment就会被重新onCreate,但是此时,页面中具有id的控件,这些值都是会被系统自动保存下来的。这是因为onSaveI...

2017-01-23 11:43:54 5168 3

原创 Android获取手机cpu架构,支持的指令集

代码如下:String[] abis = new String[]{}; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { abis = Build.SUPPORTED_ABIS; } else { abis = new String

2016-12-26 11:20:30 10457

原创 Retrofit缓存设置,处理UnKnownHostException异常信息

okHttp是相当于httpURLConnection、HttpClient同一级别的网络请求方式,而现在的httpURLConnection底层也是通过okHttp来实现的。因此square公司之前出了一个新的框架:Retrofit对okHttp近一步封装。通常我们对网络数据进行请求,联网的时候返回数据,没有网络的时候则无法请求数据。这种效果其实对很多App来说不是很令人满意的。因此,我们希

2016-12-16 22:15:10 4406

原创 归并排序

归并排序,思想是将两个有序的数组归并成一个有序的数组。它的时间复杂度是NlogN。归并排序同时是分治算法的很好体现。因为归并的前提是左右两边数组是有序的,因此我们得从最小的每两个长度开始进行归并,然后每4个长度开始归并,以此类推。在较小长度的数组中,归并排序的效率无法证明与希尔排序的是快是慢,但是在较长长度的时候,是优于希尔排序的。首先先理解归并的方法: /

2016-12-06 00:28:50 856 1

原创 选择排序、插入排序、希尔排序

选择排序工作原理是从待排序的数据元素中选出最小(或最大)的一个元素,并与第一个数交换位置,然后选择剩下数组中最小的数,放到数组的第二个位置,一次类推。图解过程如下:选择排序特点是:1、运行时间和数组内容无关:我们会发现,即使是一个已经排序好的数组去使用选择排序,运行的时间与随机的数组排序时间居然一样长2、移动的数据少:数组的交换次数和数组大小是线性关系。

2016-11-30 22:25:18 522

原创 Android仿安居客房源详情页图片显示

效果首先把安居客房源详情页的效果展示出来:分析这是一个图片展示效果,整个页面可以看出,分为两层:第一层,图片展示;第二层,一个详情页的显示。而图片展示页面刚进入的时候,是一个被收缩的页面,我们可以通过下滑和上滑来展开和收缩图片页面。同时,图片的浏览页面由ViewPager + TabLayout构成。但是在这里,一个TabLayout 控制一个ViewPager页面,而一个

2016-11-29 22:46:26 4840

原创 背包、队列和栈

背包(Bag)、队列(Queue)、下压栈(Stuck)是基础数据类型集合的三种类型,他们的区别在于删除或者访问对象的顺序不同。背包背包是一种不支持从中删除元素的集合数据类型,它的作用就是帮助用例收集元素并迭代遍历所有收集到的元素。具体实现:/** * 背包 * @author xiaoqi * * @param */public class Bag { p

2016-11-20 21:30:36 1201

原创 greenDao3的基本使用

greenDao是一个开源的AndroidORM对象关系映射型数据库操作框架,它的使用效率要高于其他ORM型数据库框架。greenDao官网:http://greenrobot.org/greendao/greenDao GitHub地址:https://github.com/greenrobot/greenDAOgreenDao核心类:DaoMaster:Da

2016-11-17 17:01:37 1728 1

原创 位运算、时间复杂度、空间复杂度

位运算1、&  与运算都为1则是1,否则为02、| 或运算有一个1,就为1,否则是03、~ 非运算取相反数4、^ 异或运算相同为0,不同为注:1、对两个数进行位运算,需要将两个数转化为二进制:例如:a = 128的二进制形式为:10000000           b = 129的二进制形式为:10000001   a&b 1000000

2016-11-16 23:41:33 3313

Android仿安居客房源详情界面

仿安居客图片展示效果,blog地址http://blog.csdn.net/qq_25412055/article/details/53399175

2016-11-29

解决微信混淆出错的jar包

具体解决方法http://blog.csdn.net/qq_25412055/article/details/52798764

2016-10-12

对多种方式实现进程保护的研究

http://blog.csdn.net/qq_25412055/article/details/52790980 对各种方式让进程不被杀死的方法的测试和研究

2016-10-12

Sqlite使用工具类

http://blog.csdn.net/qq_25412055/article/details/52414420

2016-09-02

仿微信清理缓存动画

http://blog.csdn.net/qq_25412055/article/details/52373218

2016-08-31

仿iOS菜单和对话框

http://blog.csdn.net/qq_25412055/article/details/52116165

2016-08-04

android 4.4源码下载

Android源码下载

2016-06-28

ViewPage+Fragment

http://blog.csdn.net/qq_25412055/article/details/50433946 这里我们介绍了如何使用ViewPager+Fragment,界面比较简单,欢迎下载

2015-12-30

万能Adapter

万能Adapter的Demo。适用于简单的ListView

2015-12-17

空空如也

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

TA关注的人

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