- 博客(27)
- 资源 (6)
- 收藏
- 关注
原创 如何通过自定义线程池去实现一个简单的图片ImageLoader
话说接触自定义线程池的时候还是几年前用Volley框架的时候,当时就注意到了一个东西叫队列,后来在实际开发中也没有用到相关的东西,只是写过简单的demo而已,现在各种框架很成熟,用多了就缺少了动手能力,所以我就简单了实现了这个框架。整成思路是:默认创建了5个线程,通过LinkedBlockingQueue去管理线程执行请求,当没有任务时等待执行任务,当有任务来的时候就去执行线程,当任务超过时就排...
2019-10-09 21:00:21 206
原创 Android 自定义可滚动导航栏
先上效果图:现在很多新闻类型的app,例如头条app都有图上的导航栏效果。看似一个简单的效果,实际上用到了很多知识点,例如动态创建布局,动态给控件设置宽高、滑动效果、滑动惯性效果、事件分发等。其实用横屏的scrollview也能实现类似的效果,但是总觉得用现成的控件实现起来没多大意思,也锻炼不了开发能力。所有我们通过自定义的方式去实现,装逼效果可达到满分。当我们设置宽度控件为wrap_co...
2019-06-21 21:44:09 1095 2
原创 android实现自定义seekbar,重新绘制background、secondaryProgress、progress进度条、滑块thumb
原生的seekbar,设置progressDrawable可以改变seekbar进度条的样式,例如如下样式。<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:i...
2019-06-05 14:02:00 6681 1
原创 Flutter控件篇:ListView(1)
ListView:import 'package:flutter/material.dart';void main() => runApp(new MyApp());class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { final title = 'B...
2019-05-31 11:30:41 256
原创 git常用操作命令
设置用户git config --global user.name ‘userName’git config --global user.email ‘email’初始化仓库git init拉取代码:git pull加入本地仓库:git add .提交到本地仓库:git commit -m “提交注释”在原来的基础上更改:git commit --amend “提交注释”推送远程...
2019-05-22 19:18:22 135
原创 android实现对apk资源文件整体替换
上一篇文章中我们实现了对资源文件的替换,但是有一个问题,就是得创建一个resource对象并使用这个resource对象才能实现对资源的替换,很麻烦,需要每个类去重写getResource方法。通过阅读framwork层源码发现ContextImpl类的构造方法中实现了对resource的赋值操作。 private ContextImpl(ContextImpl container, Acti...
2019-05-14 21:20:27 5672 2
原创 android如何加载外部的资源文件
最近在研究插件化和热更新的时候对资源文件的加载和替换产生了费解,比如说腾讯的tinker加载资源补丁是如何替换已有的资源文件的,由于它加载的是差异资源包,那肯定是将差异资源和原有的资源进行合并,如果是存在的资源那就去覆盖。我们先在原有的项目资源文件上设置一个颜色值,之后把项目运行到手机上。<color name="plugin_color">#00ffff</color>...
2019-05-08 21:32:04 3153
原创 通过hook思想拦截系统APi(startActivity)并跳转到没注册过的Activity
hook俗称钩子可以对系统api进行拦截做一些自己的操作,如何拦截我们android中的startActivity方法呢,并且在不注册activity的情况下去启动activity。首先我们先看下startActivity方法是怎样调用的吧。、点开startActivity方法我们发现先重写了startActivity@Override public void startActivit...
2019-05-07 20:36:18 850
原创 我们自己也可以实现像retrofit那样以注解的方式建立接口
看过retrofit源码的同学都知道retrofit框架用到了很多设计模式,而且refrofit比较新颖的地方就是以注解的方式建立接口,其实它就是运用了动态代理模式,拿到Method这个对象去解析注解之后封装起来。动态代理设计模式在java设计模式中还是比较重要的,比如说插件化中hook思想也是在动态代理模式中去完成的。我们也简单的通过动态代理模式去实现像retrofit那样的效果。首先我们也建...
2019-05-06 19:20:55 182
原创 Android带你了解热修复
热修复的简单实现热修复没你想的那么难,只要了解了热修复的原理,你也可以轻轻松松自己实现个简单的热修复demo。我们在实现热修复功能前,先要了解几个类的关系和作用,classLoader、BaseDexClassLoader、DexclassLoader、PathClassLoader、DexPahtList、Elements。我画了一张流程图阐述了它们的关系。DexclassLoader和P...
2019-05-05 21:39:36 525
原创 DexClassLoader如何加载dex\dex.jar文件
DexClassLoader的初步使用DexClassLoader可以加载apk、jar、dex格式的文件,接下来我会使用DexClassLoader如何加载dex文件和jar文件。首先看一下DexClassLoader这个类需要传什么参数public class DexClassLoader extends BaseDexClassLoader { public DexClassL...
2019-04-30 15:20:18 929
原创 .class文件编译成.dex文件does not match path问题解决
.class文件编译成.dex文件does not match path问题解决用dx工具把.class文件编译成.dex文件时出现路劲不匹配问题:如下图如何解决呢,首先先配置下dx工具的环境变量,例如我的dx路劲:D:\developmenttools\android-sdk-windows\build-tools\20.0.0。加入环境变量path中即可.在androidstudio中...
2019-04-30 11:08:56 3420
原创 动态圆形进度条
旋转进度条圆形旋转进度条,外圆弧颜色渐变,内圆弧是两张颜色不一样图案一样的图片,要动态切割画布切成一个圆弧形。在view里实现图片叠加的效果有两种方式,一是通过画笔的paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN))方法去改变porterDuff.Mode的模式,PorterDuff图片叠加的模式有16种之多,有...
2019-04-20 13:18:24 591
原创 改变颜色透明度
颜色透明度小算法很多需求要改变view的透明度可通过setAlpha()方法,如果要动态改变就传参数0-255即可,到时当你在OnDraw方法里去画一个弧形的时候要达到渐变效果就需要一个颜色值数组。这个方法是把颜色值转换成16进制再把16进制转化成int类型,看代码:private String colorString = "#FFFF4D00";public void ColorByte...
2019-04-16 23:29:25 686
原创 可旋转的圆形菜单栏
可旋转的圆形菜单栏一个圆形的可旋转的菜单栏。功能:可动态添加菜单view,菜单view随着手势的旋转而旋转,菜单view可点击。自定义一个RelativeLayout,添加的菜单view被放置在一个圆形轨迹中,随着手势旋转而旋转。代码:动态添加菜单view private List<View> list = new ArrayList<>(); public...
2019-04-15 13:57:03 1267
原创 使用IJKPlayer播放视频实现了一些播放视频的基本操作
使用IJKPlayer播放视频实现了一些播放视频的基本操作Iijkplayer目前是很流行的音视频框架,集成我这里就不多说了,网上很多,大概就是编译ijkplayer的源码得到里边的so文件,添加到自己项目的libs文件夹中,gradlle依赖下资源。我这里是在IjkVideoView基础上开发的,自己实现了播放、暂停、旋转全屏播放、音量和亮度调节、进度条、拖动进度条播放功能,可以满足普通的播放...
2019-04-02 14:42:03 4763 1
原创 MVP+Rxjava+Retrofit网络框架
先来简单了解下mvp模式,mvp是由model、view和presenter构成。model负责处理数据模型,view负责给视图控件view提供接口,presenter将model和view联系起来。如图: retrofit对okhttp进行了封装,简化了好多代码,不得不说,真是很棒!我这里主要用retrofit进行网络请求,用rxjava处理网络请求的回调;这是我的项目目录: 如何单独的使用r
2017-03-28 17:34:07 385
原创 Asynchttpurlconnection 网络框架 (HttpURLConnection+newCachedThreadPool)
看过git上volley和asynchttpclient网络框架的源码好长时间了,打算自己弄个网络框架是基于HttpURLConnection+newCachedThreadPool,目前httpclient已经被淘汰了,盛行的是HttpURLConnection,像volley和okhttp都主打HttpURLConnection,所以我弄了这个框架。框架结构相对来说比较简单:Request、Re
2016-11-24 17:37:07 543
原创 RecyclerView三种布局下的上拉加载 下拉刷新
源码地址recyclerview已经代替了listview,它可以实现线性、网络、瀑布流三种样式的局部,很方便使用。但是它没有listview可以添加头部和底部的方法,那上拉加载、下拉刷新怎么实现呢,还好它可以通过viewType来选定在某个特定位置显示对应的布局。我这里指定了四种类型,header、item、footer、endView(没有更多显示的布局)。如何方便的让getItemViewTy
2016-11-04 16:27:18 3907 1
原创 实战CoordinatorLayout+Toolbar,CoordinatorLayout+CollapsingToolbarLayout
先看下两个效果图: 使用这些新控件gradle条件:compile 'com.android.support:appcompat-v7:24.2.1'compile 'com.android.support:support-v4:24.2.1'compile 'com.android.support:design:24.2.1'compile 'com.android.suppor
2016-10-24 15:48:06 810
原创 仿NestedScrollingParent嵌套滑动
用CoordinatorLayout很方便实现嵌套滑动,今天我们就用原始的套路自定义View来实现嵌套滑动功能,下次直接用CoordinatorLayout来实现。 先看下实现的效果: 先简单分析下思路:向上滑动时,当滑动高度没有超过头部的时候,滑动事件是被父类消费的,直到滑动的高度头超过头部的时候,滑动事件才传递给它的子view(这里是listview),此时选项按钮布局被固定在顶端。这时候l
2016-10-18 18:49:01 565
原创 volley源码的简单分析(1)
先看着句代码**RequestQueue queue = Volley.newRequestQueue(MainActivity.this);**都干了什么。当版本大于9时会创建HurlStack,它主要是对HttpURLConnection请求的封装 。小于9创建HttpClientStack,它是对HttpClient的封装。BasicNetwork对HttpStack进行管理,由Basic
2016-09-23 16:49:52 284
原创 Activity被系统销毁造成的Fragment混乱的问题
大多数App主页底部都会有几个tab页面,用Activity+Fragment或者Activity+Vierpager+Fragment来管理Tab页面(由于viewpager的加载机制所以不会出现这个问题),当程序长期在后台由于系统资源不足就把MainActivity回收了或者从MainActivity点进去的activity报错了点击back回到MainActivity fragment也会混
2016-09-07 17:06:30 4199 5
原创 android 自定义水平进度条
随着水平进度长度的变化,百分比文字也跟着进度条的长度在屏幕移动。progressbar的第一层背景要设置成透明的,第二层背景设置一种颜色;这是progressbar的样式代码: android:id="@+id/probardown" >
2016-02-26 15:16:45 2554
原创 android 抛物线动画
抛物线动画:根据抛物线方程式得出x轴,y轴的坐标(x,y),再根据动画使其移动,就完成一个简单的轨迹动画.实现思路:自定义个view,随着x轴的水平移动根据抛物线方程得到y轴的值,利用path画出一条轨迹;在高出这条抛物线小人的高度再画一天抛物线,这条抛物线就是小人的运动轨迹。直接上代码。。。自定义View:public class MyAnimationView extends Li
2016-02-25 11:18:40 2315
原创 android 时间选择器
最近项目里要做个时间选择器,网上看了很多demo,自定义view学习很久了,自己打算做一个。.废话不多说,先了解下大概思路吧。首先要知道界面可滑动(这不废话吗),滑动到最大距离和最小距离自动弹回,滑动的总距离对item取余得到距离如果大于二分之一item则继续滑动剩余的长度,否则回弹到原来的位置;主要就是利用Scroller和scrollby来是界面滑动,剩下就是一些距离计算和逻辑处理,看代码吧;
2016-02-03 15:45:12 694
使用IJKPlayer播放视频实现了一些播放视频的基本操作
2019-04-02
AsyncHttpURLConnection网络框架
2016-11-24
RecyclerView三种布局下的上拉加载 下拉刷新
2016-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人