- 博客(64)
- 资源 (13)
- 收藏
- 关注
原创 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
886
原创 Flutter 之ListView实现下拉刷新和上拉加载更多
一、效果二、实现 1、首先的创建ListView,之前有叙述 2、如果你是只需要下拉刷新,则直接用 RefreshIndicator包裹ListView,然后去实现onRefresh方法即可 3、如果你还需要加载更多,则需要实现ScrollController然后去监听他的滑动事件,然后判断是否到达底部三、源代码class StarPage extends StatefulWidget { const StarPage({Ke...
2021-09-01 16:50:26
1930
原创 Flutter之使用GridView实现网格布局
一、效果二、实现 1、创建GridView.count为body子元素 2、设置crossAxisCount设置列数 3、设置children即为每个子View三、源码class UserPage extends StatefulWidget { const UserPage({Key key}) : super(key: key); @override _UserPageState createState() =&g...
2021-09-01 13:56:52
368
原创 Flutter之实现可折叠的列表
一、介绍 1、使用flutter自带组件ExpansionTitle实现 2、ExpansionTitle属性介绍const ExpansionTile({ Key key, this.leading, //标题左侧需要展示的Widget @required this.title, //要展示的标题Widget this.subtitle, this.backgroundColor, //背景 t...
2021-09-01 13:24:06
3982
原创 Flutter之ListView实现水平和垂直滚动
一、效果就和正常的列表控件滑动一样二、实现 1、创建ListView组件,因为里边需要传入一个List的Widget这个就是我们的组件 2、ListView默认是垂直滑动的,如果你的需要的就是垂直滑动不用做任何处理直接填充数据即可 3、准备数据源,填充ListView实现就能实现滑动 4、如果你需要把垂直数据源变为水平的那么修改ListView的scrollDirection: Axis.horizontal 5、...
2021-09-01 11:18:36
2166
1
原创 Flutter之Json解析和数据转换
1、如何选择Json序列化方式? 如果项目较小手动序列化即可 如果项目比较大,可使用插件json_serializable和built_value2、如何序列化? flutter的convert,Map<String, dynamic> test = jsonDecode(jsonStr); 使用插件看对应得例子即可3、复杂Json解析? 写对应的实体解析类即可4、提升效率在线转换JSON...
2021-08-31 18:25:18
470
原创 Flutter 异步之Future与FutureBuilder
1、什么事Future? 表示在某个时间的值或者错误,借助Future我们可以实现Flutter的异步操作,类似ES6中的Promise,提供then和catchError的链式调用。 它是dart:async包中的一个类,使用时需导入dart:async包,它有两种状态:pending(执行中)和completed(执行结束)2、Future常见用法? 使用future.then获取future的值与捕获的异常 组合async,a...
2021-08-31 17:59:46
310
原创 Flutter之实现顶部导航栏颜色渐变
首先看效果一、用到的组件及作用Stack(实现堆叠效果)、MediaQuery(移除状态栏顶部内填充)、NotificationListener(监听滑动)、Opacity(透明度渐变控件)二、实现 1、首先因为appbar是盖在内容上的,所以根布局就是Stack布局 2、因为要移除内容的padding实现侵入式效果,所以需要使用 MediaQuery.removePadding且设置removeTop为true3、因为要监听...
2021-08-31 16:50:07
2430
原创 Flutter之Banner实现
一、首先在yaml中导入 flutter_swiper: ^1.1.6组件二、在body中使用Swiperclass HomePage extends StatefulWidget { HomePage({Key key, this.title}) : super(key: key); final String title; @override _HomePageState createState() => _HomePageState();}class _H..
2021-08-31 15:47:32
309
原创 Flutter 之Tab切换效果
1、点击tab实现自由切换页面一、首先在Flutter中一切皆组件,万物皆组件,都可以用组件来表达1、创建一个Flutter界面class MainPage extends StatelessWidget { const MainPage({Key key}) : super(key: key); @override Widget build(BuildContext context) { return TabNavigator(); }}2、在创...
2021-08-31 14:12:04
3797
原创 Android 之使用libjpeg压缩图片
一、环境Android Studio 4.0.1NDK R15cso包是2.0.6生成的 libturbojpeg.so二、准备1、编写native方法并用javah命令生成头文件object ImageUtil { private external fun compressBitmap(bitmap: Bitmap, quality: Int, fileName: String): Int fun compressImage(bitmap: Bitmap, q
2020-08-12 17:27:43
944
原创 Android Studio 编译 libjpeg-turbo 并生成so库
一、编译环境1、Android Studio 4.0.1 且支持CMake编译2、libjpeg-turbo 2.0.5并下载源码 https://github.com/libjpeg-turbo/libjpeg-turbo/archive/2.0.5.zip二、配置1、创建一个Android项目并创建一个存放源码的路径2、 关联CMake文件,选择CMakeLists.txt的路径一般如果你不是有特别需求,不需要自己...
2020-08-12 16:39:05
1257
原创 Android 之Kotlin使用Retrofit和RxJava实现网络请求
一、实现原理 使用Retrofit实现网络请求,在通过Rxjava2实现线程调度,通过Gson得到当前的需要的模型类二、实现过程1、添加依赖 implementation 'com.squareup.okhttp3:okhttp:3.12.3' // OkHttp3 implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' // 日志 implementation 'com.squareup...
2020-06-05 14:55:07
774
原创 Java Web之 Spring MVC
一、MVC简介如图在Controller层完成业务数据的抽取,在View层负责业务数据的呈现,在前端控制器层实现分发调度。MVC的核心就是业务数据抽取同业务数据使之呈现相分离如一个网页我们看到的页面称为视图层也就是View,主要就是为用户提供UI和重要的数据呈现业务数据的信息表示,关注支撑业务的信息构成,一般是多个业务实体的组合称为Model(模型层)调用业务逻辑产生合适的...
2020-05-08 15:01:23
344
转载 java web之spring boot
在csdn上就有按照这个文章学习,没啥问题,自己已经实践过了,感谢所有的人无私的分享https://blog.csdn.net/xuforeverlove/article/details/89635888
2019-11-08 09:59:22
145
原创 Android 快速搭建MVP框架
一、为什么用?优点:1、代码逻辑简洁2、降低耦合、方便维护缺点:代码可能会比MVC多,层次更复杂一些,但是省去了在大篇幅中找代码的烦恼二、怎么用1、先看目录2、实现base类 BaseModel和BaseView我这里没有公用的,所以是空的类,BaseView是个接口类BasePresenter类public abstract class Bas...
2019-09-03 14:39:16
971
1
原创 Android 之Kotlin封装Okhttp3和gson实现网络请求和下载
一、首先添加项目的Kotlin支持,这个不概述了,网上很多我主要就是讲述我怎么写的Kotlin网络请求二、使用的开源项目implementation 'com.squareup.okhttp3:okhttp:3.14.2'implementation 'com.google.code.gson:gson:2.8.5'其次还得加上 compileOptions { ...
2019-07-01 15:24:05
4908
原创 Eclipse下Maven的使用
一、Maven的安装可以查看这篇文章https://www.cnblogs.com/eagle6688/p/7838224.html二、使用Maven的目的 简化包的管理,也不用去找一堆jar去哪里找Maven项目?在https://mvnrepository.com/Maven的在线搜索需要的项目,到项目详情中有Maven的依赖二、使用常用的命令pa...
2019-04-10 15:58:24
211
转载 Linux下搭建RTMP流媒体服务器
在csdn上看到有了,所以就没写OBS安装和rtmp推流https://blog.csdn.net/boonya/article/details/78663675可能会遇到的问题https://blog.csdn.net/z920954494/article/details/52132125...
2019-03-06 13:02:02
1607
原创 Android 动态注册JNI
一、正常完成Android中的native方法有两种 1、写全路径,全类名方法 2、动态注册二、实现1、全路径实现 例如,我在MainActivity中创建了native方法 public native void test(); 在cpp文件中全路径的写法是extern "C" JNIEXPORT void JNICALLJav...
2019-02-27 17:25:11
193
原创 Android studio配置AspectJ
一、首先说说使用AspectJ的意义 使用切点插入,减少冗余代码,但是因为是编译时插入,所以运行时会有性能损耗,但是总的来说微乎其微二、运行原理这是我原来的代码 @BehaviorTrace("点击方法") public void test(){ SystemClock.sleep(3000); Toast.makeText(Ma...
2018-12-06 16:04:06
998
原创 基于OkHttp 3封装的网络请求
首先导入okhttpcompile 'com.squareup.okhttp3:okhttp:3.7.0' 封装的主要类OkHttpHelper主要是封装的OkHttpClient以及请求参数的封装BaseCallback 辅助类SpotsCallBack加载的提示框,可以更改OkHttpHelper类首先把它做成一个单例 private stati...
2018-10-15 15:17:34
949
原创 Android 自定义控件之标签控件
一、首先这是效果二、实现原理通过继承ViewGroup,然后在重写 onMeasure测量每个View的宽度,重新onLayout控制每个控件的位置,并添加点击事件三、实现1、在onMeasure方法中得到显示方式,并得到宽高 int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heig...
2018-09-17 14:00:03
1464
原创 炫酷的滑动效果实现
1、先看效果图二、实现原理在网上搜的时候也发现了这个案例,列出出处,表示尊重https://blog.csdn.net/qq_34709056/article/details/72765273通过自定义ScrollView 然后在通过自定义LinearLayout ,然后去修改其中的参数,然后在添加平移、缩放或者透明度渐变效果就能实现三、实现1、首先继承ScrollV...
2018-08-17 14:51:34
468
原创 Android炫酷的播放效果
一、首先看效果二、实现原理使用贝塞尔曲线实现滑动效果,在使用属性动画实现水波纹效果,然后就能实现以上效果三、实现1、先封装动画框架,创建动画基础类PathPoint.javapublic class PathPoint { public static final int MOVE = 0; public static final int LINE =...
2018-08-16 13:50:33
962
原创 Android改变状态栏字体颜色
因为之前设计要求改变状态栏的颜色,所以自己就弄了下,网上的好多都是改变一次,因为我的是第一页是白底黑字,别的页是蓝底的,所以我就专门 研究了下首先先看未改变的颜色改变之后的颜色 因为这是API23之后才能改变的,所以你的判断版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ...
2018-08-01 12:07:05
9808
1
原创 Android 之实现运行时注解控件
一、首先的说一下注解的分类, 1、运行时注解,代码简单,复杂性低,但是效率稍微低一点点 2、编译时注解、代码多,结构复杂这里介绍的是运行时注解。二、还是先说一下思路首先创建对应的注解类,并且通过反射 findViewById 方法去实现控件的注解方法的注解使用了动态代理模式,去减少代码的量,然后通过反射去调用对应的方法,反正特别重要的就是反射反射...
2018-07-10 17:36:24
363
原创 Android 高仿ImageLoader图片加载
一、首先,废话不多说,先上图片二、实现思路 1、缓存在本地和内存中,每次加载都从本地中读取,如果本地没有则从网络下载,并保存到本地或者内存 2、内存缓存使用软引用和LruCache算法 3、本地缓存使用DiskLruCache算法 4、LruCache算法系统自带,DiskLruCache算法如果没有可以去网上下载,当然最后我会在我的资源里放上源码三、实现 1、创建文件目录2、先...
2018-07-09 16:39:49
263
原创 Java动态代理模式
java代理模式分为静态代理和动态代理说说他们的优缺点:静态代理:能够实现精准操作,相对代码也少点,但是可扩展性很低动态代理:相对于静态代理,代码相对多一点,但是可扩展性比较好。我这里使用的是动态代理一、什么时候使用动态代理?如果你要写一个框架,返回结果是一定的,但是你的代码不一定能满足所有人的业务逻辑要求,你就可以使用动态代理,不管他中间怎么操作,怎么变化你的结果最终不会变化。二、实现思路 首先...
2018-07-05 16:29:12
268
原创 Java优雅的单例模式
一、饿汉模式public class SingleOne { public static SingleOne singleOne=new SingleOne(); }优点:多线程安全缺点:项目启动慢,因为第一次加载需要实例化,且违背了Java随用随加载的原则二、懒汉模式public class SingleTwo { private static SingleTwo singleTw...
2018-03-28 16:38:00
771
原创 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
2608
原创 FFMPEG 之音频解码及AudioTrack播放音频
一、实现原理 使用FFMPEG解码音频文件,然后调用AudioTrack播放解码文件二、实现 1、导入ffmpeg的头文件,以及so文件 2、创建native方法,以及AudioTrack对象 PlayerControl.javapackage com.xiaofan.testffmpeg2;import android.medi
2017-12-14 16:23:49
1378
原创 FFMPEG 之视频播放
先看界面效果,虽然有点low,但是效果实现了一、实现原理1、使用ffmpeg解码视频2、然后使用libyuv播放解码的视频二、实现1、先看目录结构2、ffmpeg编译以及引用,在之前的篇章已经说过了,不知道得可以看看之前的文章3、编译libyuv 1、首先在https://chromium.googlesource.com/external/lib
2017-12-13 10:54:59
7747
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
310
原创 Linux 编译 FFMPEG
先看编译好的so包一、初步准备 1、下载FFMPEG的源码(尽量下载版本较低的,高版本编译如果出现问题,估计网上找不到答案),我这里用的是2.6.9 2、Linux版本的ndk文件 3、还得有个Linux系统二、编译前的准备 1、因为我这里用的Ubuntu 16.04.2 L
2017-11-24 15:09:03
530
原创 JNI 之 windows下增量更新全过程
一、先看看效果图二、简述实现过程因为我这里是自己在编译,不是服务器给编译生成差分包,所以我这里是在本地生成差分包,然后在把差分包传到服务器然后下载即可三、编译环境win7系统 Android studio 2.3 jdk1.8 Eclipse(生成差分包) 、vs2013(编译bsdiff源码生成dll)四、实现步骤1、创建Android项目,并创建na
2017-10-20 17:39:15
504
原创 JNI 之 文件的拆分和合并
一、实现思路创建native方法,然后生成so库,然后调用即可二、实现1、创建native方法NDKFileUtils.javapublic class NDKFileUtils { static { System.loadLibrary("native-lib"); } /** * 文件的拆分 * @param p
2017-10-18 11:26:34
311
原创 Android 高仿IOS打开和关闭按钮
一、废话不多说,先上图二、实现思路如果你们的效果要求不是太严苛,你可以使用这种方式。看起来还是挺美观和漂亮的。1、使用系统的Switch控件,然后设置thumb和track背景就能实现2、然后监听setOnCheckedChangeListener就能知道打开和关闭三、代码activity.xml<Switch android:id="@+id/ac
2017-10-10 17:27:17
774
原创 JNI 之中文乱码和数据类型访问
因为这一篇是接着上一篇的所以,环境配置什么的都不在赘述了。一、实现1、目录结构2、Test.java中的native方法 //访问构造方法 public native long accessConstructor(); //调用父类方法 public native void accessNonvirtualMethod(); //解决中文乱码 public nativ
2017-10-08 23:37:48
509
原创 JNI 之数据类型与属性和方法的访问
一、实现工具 Eclipse的java工程 vs2010的dll库二、实现过程 1、在vs中生成dll动态链接库 2、然后在java中使用dll库三、实现流程1、在java类中创建native方法2、使用javah方法生成jni头文件3、把头文件拷贝到vs项目c文件同目录下,然后添加到头文件中4、生成dll动态内库5、调用c
2017-10-06 22:54:59
415
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人