Android原创
文章平均质量分 64
wanxiaofan
看着你快乐的讲述你的故事,我替你陷入了深深的思考!
展开
-
JZVideo之非自定义,直接修改UI
一、环境搭建 1、JZ主依赖,版本7.7implementation 'cn.jzvd:jiaozivideoplayer:7.7.0'2、如果需要切换解码内核则需导入别的依赖 //阿里内核 implementation 'com.aliyun.sdk.android:AliyunPlayer:4.5.0-full' implementation 'com.alivc.conan:AlivcConan:0.9.5' //IJKPlayer解析...原创 2021-09-28 16:43:33 · 894 阅读 · 0 评论 -
FFMPEG 之视频播放
先看界面效果,虽然有点low,但是效果实现了一、实现原理1、使用ffmpeg解码视频2、然后使用libyuv播放解码的视频二、实现1、先看目录结构2、ffmpeg编译以及引用,在之前的篇章已经说过了,不知道得可以看看之前的文章3、编译libyuv 1、首先在https://chromium.googlesource.com/external/lib原创 2017-12-13 10:54:59 · 7770 阅读 · 1 评论 -
FFMPEG 之音频解码及AudioTrack播放音频
一、实现原理 使用FFMPEG解码音频文件,然后调用AudioTrack播放解码文件二、实现 1、导入ffmpeg的头文件,以及so文件 2、创建native方法,以及AudioTrack对象 PlayerControl.javapackage com.xiaofan.testffmpeg2;import android.medi原创 2017-12-14 16:23:49 · 1380 阅读 · 0 评论 -
JNI 之 pthread 多线程使用
一、原理1、在jni中使用pthread实现多线程二、实现 1、创建native方法2、使用javah命令生成头文件3、在c文件中实现native方法#include #include #include "com_xiaofan_testndk_NDKUtils.h"#include #include #include #define LOGI(FOR原创 2018-01-24 16:12:50 · 2620 阅读 · 0 评论 -
Java优雅的单例模式
一、饿汉模式public class SingleOne { public static SingleOne singleOne=new SingleOne(); }优点:多线程安全缺点:项目启动慢,因为第一次加载需要实例化,且违背了Java随用随加载的原则二、懒汉模式public class SingleTwo { private static SingleTwo singleTw...原创 2018-03-28 16:38:00 · 775 阅读 · 0 评论 -
Android 高仿ImageLoader图片加载
一、首先,废话不多说,先上图片二、实现思路 1、缓存在本地和内存中,每次加载都从本地中读取,如果本地没有则从网络下载,并保存到本地或者内存 2、内存缓存使用软引用和LruCache算法 3、本地缓存使用DiskLruCache算法 4、LruCache算法系统自带,DiskLruCache算法如果没有可以去网上下载,当然最后我会在我的资源里放上源码三、实现 1、创建文件目录2、先...原创 2018-07-09 16:39:49 · 266 阅读 · 0 评论 -
Android 之实现运行时注解控件
一、首先的说一下注解的分类, 1、运行时注解,代码简单,复杂性低,但是效率稍微低一点点 2、编译时注解、代码多,结构复杂这里介绍的是运行时注解。二、还是先说一下思路首先创建对应的注解类,并且通过反射 findViewById 方法去实现控件的注解方法的注解使用了动态代理模式,去减少代码的量,然后通过反射去调用对应的方法,反正特别重要的就是反射反射...原创 2018-07-10 17:36:24 · 366 阅读 · 0 评论 -
Java动态代理模式
java代理模式分为静态代理和动态代理说说他们的优缺点:静态代理:能够实现精准操作,相对代码也少点,但是可扩展性很低动态代理:相对于静态代理,代码相对多一点,但是可扩展性比较好。我这里使用的是动态代理一、什么时候使用动态代理?如果你要写一个框架,返回结果是一定的,但是你的代码不一定能满足所有人的业务逻辑要求,你就可以使用动态代理,不管他中间怎么操作,怎么变化你的结果最终不会变化。二、实现思路 首先...原创 2018-07-05 16:29:12 · 272 阅读 · 0 评论 -
一键锁屏应用原理
有时间看到很多锁屏应用,都不知道怎么做的。或许有人有相同的困惑,其实那个灭什么困难的,可以说是很简单的。废话不多说,直接上代码。注意:你没有在安全设置中激活权限,你点击锁屏时不管用的 在有的手机上不取消激活是卸载不掉的,但是在这里可以解决创建个Receiver继承DeviceAdminReceiver在里边可以做你想做的事情,假如你只想关闭屏幕,可以啥事情都不用做创建xml文原创 2016-11-23 16:00:14 · 2264 阅读 · 0 评论 -
Android 滑动Toolbar透明度变化
一、这是效果二、实现过程 自定义ScrollView获取滑动量,然后转换为0--1的透明度,并改变Toolbar的setAlpha三、实现代码 MyScrollView.javapackage com.xiaofan.test.view;import android.content.Context;import android.util.Attribu原创 2017-07-24 14:38:12 · 561 阅读 · 0 评论 -
Android 高仿IOS打开和关闭按钮
一、废话不多说,先上图二、实现思路如果你们的效果要求不是太严苛,你可以使用这种方式。看起来还是挺美观和漂亮的。1、使用系统的Switch控件,然后设置thumb和track背景就能实现2、然后监听setOnCheckedChangeListener就能知道打开和关闭三、代码activity.xml<Switch android:id="@+id/ac原创 2017-10-10 17:27:17 · 778 阅读 · 0 评论 -
Android改变状态栏字体颜色
因为之前设计要求改变状态栏的颜色,所以自己就弄了下,网上的好多都是改变一次,因为我的是第一页是白底黑字,别的页是蓝底的,所以我就专门 研究了下首先先看未改变的颜色改变之后的颜色 因为这是API23之后才能改变的,所以你的判断版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ...原创 2018-08-01 12:07:05 · 9813 阅读 · 1 评论 -
Android炫酷的播放效果
一、首先看效果二、实现原理使用贝塞尔曲线实现滑动效果,在使用属性动画实现水波纹效果,然后就能实现以上效果三、实现1、先封装动画框架,创建动画基础类PathPoint.javapublic class PathPoint { public static final int MOVE = 0; public static final int LINE =...原创 2018-08-16 13:50:33 · 967 阅读 · 0 评论 -
基于OkHttp 3封装的网络请求
首先导入okhttpcompile 'com.squareup.okhttp3:okhttp:3.7.0' 封装的主要类OkHttpHelper主要是封装的OkHttpClient以及请求参数的封装BaseCallback 辅助类SpotsCallBack加载的提示框,可以更改OkHttpHelper类首先把它做成一个单例 private stati...原创 2018-10-15 15:17:34 · 951 阅读 · 0 评论 -
Android studio配置AspectJ
一、首先说说使用AspectJ的意义 使用切点插入,减少冗余代码,但是因为是编译时插入,所以运行时会有性能损耗,但是总的来说微乎其微二、运行原理这是我原来的代码 @BehaviorTrace("点击方法") public void test(){ SystemClock.sleep(3000); Toast.makeText(Ma...原创 2018-12-06 16:04:06 · 1006 阅读 · 0 评论 -
Android 快速搭建MVP框架
一、为什么用?优点:1、代码逻辑简洁2、降低耦合、方便维护缺点:代码可能会比MVC多,层次更复杂一些,但是省去了在大篇幅中找代码的烦恼二、怎么用1、先看目录2、实现base类 BaseModel和BaseView我这里没有公用的,所以是空的类,BaseView是个接口类BasePresenter类public abstract class Bas...原创 2019-09-03 14:39:16 · 971 阅读 · 1 评论 -
FFMPEG 之视频解码
我这里的so包是来自我的FFMPEG编译生成的,如果没有可以按照上一篇编译生成一下,在我的资源里边也有首先先看项目目录一、过程1、首先创建native方法 VideoUtils.javapublic class VideoUtils { public native static void decode(String input,String output)原创 2017-11-28 15:15:53 · 313 阅读 · 0 评论 -
Android 自定义进度条
一、废话少说先上图二、思路主要是使用自定义view和自定义属性去实现刷新三、代码attr.xml CustomP原创 2017-08-15 19:01:33 · 617 阅读 · 0 评论 -
Android studio 测试框架
1、在Android项目创建的时候默认就引用了Junit测试框架,所以使用的时候不用再添加别的上边这个在官方给的解释是在Android 模拟器上使用的在里边使用只需创建方法添加@Test注解即可下边这个官方解释是在本机测试的,说是可以不用测试机,但是我在其中没有找到Context对象注意: 1、在ExampleInstrumentedTest获取Contex原创 2016-11-24 17:19:06 · 834 阅读 · 0 评论 -
RecyclerView 实现侧滑删除和拖动排序
在使用ListView的时候实现拖动排序,主要靠继承别人第三方的,在网上有很多例子,这里不介绍,主要是介绍一下recycleview的拖动排序和滑动删除一、主要知识点: 1、 ItemTouchHelper.Callback的使用 2、接口传值ItemTouchHelper.Callback getMovementFl原创 2017-06-06 20:15:30 · 320 阅读 · 0 评论 -
Android jsoup 按比例显示图片
在Android项目中,有时候服务器会给你返回html的字符串。如果里边需要显示带图片的html。显示主要有两种方式1、用TextView的Html的ImageGetter显示,处理里边的getDrawable方法2、第二种在webview中显示 在webview中显示html文本一般这么用就行 loadDataWithBaseURL(null, Str,"text/原创 2017-06-02 16:32:22 · 523 阅读 · 0 评论 -
Android MaterialDesign 转场动画
为什么使用? 现在很多项目都有很炫酷的转场动画,我们也必须得有,让项目更上档次,并且提高自己知识点:ActivityOptionsCompat类以及共享元素的使用转场动画分为两类:共享元素转场和普通转场 使用转场动画的前提是都得给予权限,给权限有两种方式 //方法一: getWindow().requestFeature(Window.FEATURE_C原创 2017-06-30 10:30:42 · 816 阅读 · 0 评论 -
Android 动画
一、为什么使用?属性动画能够改变真实的改变控件的属性,比如我们用补间动画实现了,平移并且保留了位置,但是点击事件啥的,还是在原来的位置。但是属性动画就不是二、动画分类 1、补间动画(Tween Animation) a:支持四种类型平移(Translate)、旋转(Rotate)、缩放(Scale)、透明度(Alpha) b原创 2017-06-30 11:29:13 · 217 阅读 · 0 评论 -
Android 使用 svg
一、简述下svg使用过程有时候我们的有些图标需要在不同分辨率上显示不同的大小,一般适配可能是切图,或者按比例缩放,但是难免会失真。使用svg可以避免失真。但也不是完全。不能拉伸太大倍数,不然还是会失真的。 一般的svg可以使用ps实现,在公司里美工会给我做好,我们拿到对应的文件即可,在该文章中使用的是网上生成工具,地址下边会给出。也可以寻找网上完整的svg图片 svg的原原创 2017-06-22 23:12:56 · 326 阅读 · 0 评论 -
Android 应用内部打开PDF文件
有时候在项目中,难免会用到打开pdf这个功能,自己写吧,太坑,而且也不知道从何下手。这里推荐一个比较好的第三方开源pdf阅读器,在网上搜索了很多,如果google能用,直接用webview就好了。但是现实很残酷。这个开源项目是pdfview 地址:https://github.com/barteksc/AndroidPdfViewer https://github.com/JoanZ原创 2017-07-13 14:56:50 · 6225 阅读 · 1 评论 -
Android studio 引用so错误
我在最近开发的项目中遇到过这种错误,我只是把我遇到的写出来,万一有人开发能遇到,也能少走些弯路。我这里引用了网易云信的代码是从gradle构建的我这里也用了第三方播放器,点击播放视频的时候老提示如下错误java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/原创 2017-07-07 10:30:25 · 394 阅读 · 0 评论 -
RecyclerView 实现 间隔线
一、先看效果: 二、简述实现方法 1、 给RecyclerView添加ItemDecoration(recyclerView.addItemDecoration(new DividerItemDecoration(this));) 2、实现ItemDecoration (在getItemOffsets 指定要绘制分割线的偏移量,onDraw 绘制自己的原创 2017-07-17 16:16:12 · 1266 阅读 · 0 评论 -
Android 实现侧滑菜单
废话少说,先上效果实现侧滑的方式有很多,比如slidingmenu,还可以自己自定义控件,但是我这里用的是系统的NavigationView,既然系统有,我们肯定优先使用系统的一、实现过程1、和NavigationView和DrawerLayout搭配使用,实现侧滑,就是这么简单二、代码 main.xml <android.support.v4.wid原创 2017-07-21 14:25:26 · 441 阅读 · 0 评论 -
Android 沉浸式设计时输入法弹出ToolBar被拉伸
这个是给ToolBar添加了android:fitsSystemWindows="true"且输入法设置adjustResizeToolbar显示不完整,输入法展开时候,Toolbar被拉伸解决办法,办法一:1、可以在布局的根布局下添加android:fitsSystemWindows="true" 我测试了华为和魅族和三星是没有问题的办法二1、给Toolb原创 2017-08-01 14:35:09 · 1480 阅读 · 0 评论 -
Android 沉浸式设计兼容基础类
思路:根据不同的版本去兼容1、在4.4以下基本没有沉浸式设计,因为系统不支持2、在4.4~5.0之间有的手机有虚拟导航栏,这里自己去写了一个NavigationBar,设置系统的高度3、在5.0以上可以设置状态栏和导航栏的颜色,所以沉浸式设计主要是针对5.0以上的手机BaseActivitypublic class BaseActivity extends AppCompa原创 2017-08-01 15:59:46 · 383 阅读 · 0 评论 -
自定义Behavior
1、这是效果二、使用注意1、某个view需要监听另一个View的状态(位置、大小、显示状态等) (需要重写layoutDependsOn( 用来决定需要监听那些控件或者容器的状态),onDependentViewChanged(当被监听的view发生改变的时候回调))2、某个view需要监听CoordinatorLayout里边所有空间的滑动状态。( 需要重写的方法:o原创 2017-08-08 20:20:57 · 308 阅读 · 0 评论 -
TabLayout和ViewPager实现今日头条效果
一、效果图二、实现原理 TabLayout+ViewPager+Fragment三、实现 MainActivity.javapublic class MainActivity extends AppCompatActivity { private TabLayout tablayout; private ViewPager viewPager;原创 2017-07-27 13:35:02 · 4627 阅读 · 0 评论 -
Android 实现水波纹效果
一、首先还是先上效果二、实现原理 自定义view,使用Path和贝塞尔曲线绘制,然后不断刷新,并且改变X、Y的值 主要知识点rQuadTo的使用 三、实现WaveView.javapublic class WaveView extends View { private Paint mPaint; private final P原创 2017-08-21 16:28:33 · 430 阅读 · 0 评论 -
Android 获取手机联系人
这几天做了一个项目要用到获取手机联系人的东东,自己就写了一个获取通讯录的东东,这种东西在手机端是有Api可以供我们使用的。下边是代码/** * @author BJShiJiHuiTou * */public class MainActivity extends Activity {private TextView tv_showtext;private Cont原创 2015-03-17 14:09:09 · 349 阅读 · 0 评论