- 博客(57)
- 收藏
- 关注
原创 Exoplayer2实现边播放边缓存
前言ExoPlayer是Google开源的一款Android应用程序级的媒体播放器。它提供了Android MediaPlayer API的替代方法,可以在本地和Internet上播放音频和视频。ExoPlayer支持Android MediaPlayer API当前不支持的功能,包括DASH和SmoothStreaming自适应播放。与MediaPlayer API不同,ExoPlayer易于自定义和扩展。这里主要使用 ExoPlayer + AndroidVideoCache 实现边播放边缓存。下面点
2020-07-31 20:29:51 8768 1
原创 微信小程序Banner实现
Page({ /** * 页面的初始数据 */ data: { // Banner数据 images:[ "http://img.zcool.cn/community/014056564bd8596ac7251c94eb5559.jpg", "http://img.zcool.cn/community/01e03b58047e96a8...
2019-05-25 10:02:34 8893
原创 微信小程序九宫格实现
Page({ /** * 页面数据源 */ data: { iconColor: [ 'red', 'orange', 'yellow', 'green', 'rgb(0,255,255)', 'blue', 'purple' ], iconStyle: [ { "type":"success", ...
2019-05-24 18:20:44 15510
原创 微信小程序列表实现
1.在 .json文件中使用 navigationBarTitleText定义当前窗口title{ "navigationBarTitleText": "小程序列表实现"}2.在 .wxss文件中编写如下:// page设置当前窗口背景色page{ background-color: #F5F5F5}// 定义.container设置容器样式.container{ ...
2019-05-23 16:11:21 23796
原创 设计一种需要登录后跳转到目标Activity的方案
前言在日常开发中,遇到需要登录后才能跳转的目标页面时,大多数写法如下:if(登录校验逻辑) { 已登录,跳转至目标页。} else { 未登录或登录过期时,跳转至登录页面。} 针对未登录或登录过期时,跳转到登录页面进行登录,登录完成后要么发送一条广播,要么借助一些主流的三方框架(如:RxJava, EventBus等)来通知登录状态,获取到登录状态后跳转到目标页面,这种写法看似简单,但写的多了,就变得冗余了,自定义一个RouteHelper来优化这种跳转流程。场景流程图定义
2021-11-12 22:00:00 596
原创 设计一个响应式网络请求
前言在日常开发中经常会涉及到网络请求,随着业务的复杂多变,对于请求库的功能及职责也要求越来越高,一个不错的请求库能使日常开发事半功倍。流程图RequestObservableRequestObserverRequestSubscriber添加依赖dependencies { // Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.
2021-11-09 22:00:00 2698
原创 组件化Application共享方案
前言我们在日常开发中,随着项目功能越来越多,业务也越来越复杂,团队成员增多,普通的项目结构也就不适合团队协作,组件化后想要全局获取应用上下文interface IModuleInit { fun onCreate() {} fun attachBaseContext(base: Context) {} fun onLowMemory() {} fun onTrimMemory(level: Int) {} fun onTerminate() {}}abst
2021-03-10 17:29:27 625
原创 Fragment中响应onBackPressed事件
前言在单个Activity+多个Fragment架构设计中,通常会遇到点击手机物理按键返回上一层页面的场景,如果Activity中添加了Fragment,不管你加了几个,点击物理返回按钮时都会触发Activity的onBackPressed事件,直接返回到上一个Activity或者手机桌面,有时候往往需要Fragment能像Activity一样返回上一个Fragment即可,这样的需求就需要在Fragment中单独处理。定义扩展函数typealias OnBackPressedTypeAlias =
2021-01-23 13:03:09 1827 5
原创 获取Theme中Attr属性的Color值
前言在做多套主题切换时,个别View是在代码中创建的,切换不同主题时,无法直接获取到自定义的 attr 属性的 color 值,在网上看了大多数使用新建一个 TypedValue 对象,然后使用 context.theme.resolveAttribute 函数将color值复制到 TypedValue 对象中,通过 typedValue.data 的方式获取,但是这种仅仅局限于当前上下文环境下的 Theme 属性,切换其他 Theme 后就不会生效,翻看了下 ***Material***的包,发现源码
2021-01-22 19:25:43 1959 1
原创 自定义商品价格AmountTextView
前言在电商项目中,通常会遇到商品价格多样化的需求;如:显示±符号,货币符号,金额数字要使用千分位,小数位要四舍五入,货币符号与金额数字要大小不一样等需求,使用 TextView + Spanned 也可以实现预期效果,但是相对来说处理起来比较麻烦,要灵活多变,个人觉得还是自定义一个View比较方便。效果图自定义AmountTextViewAmountTextView 组合:±符号+货币符号+整数位+小数位使用DecimalFormat进行格式化及四舍五入计算提供 ***fun setCur
2021-01-19 15:10:04 409
原创 使用CameraX组件实现相机拍照
前言在Camera,Camera2之后Google的Jetpack项目新增了CameraX库,利用该库,可以更轻松地向应用添加相机功能。并且CameraX适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。相对Camera,Camera2而言,CameraX只要简单的几行代码就可以实现拍照。Gradle依赖dependencies { // ... // CameraX implementation 'androidx.camer
2020-11-30 18:45:00 1805 2
原创 Glide遇到DataBinding的花式用法
前言主流的图片加载框架越来越多,对应的配置也很麻烦,加载一张图片需要配置一堆参数才能达到需求,使用 Glide + DataBinding + Kotlin扩展简单的几个类,可以完成方便快速的统一进行配置。1.定义缓存配置项class DiskCacheOptions private constructor(builder: Builder){ val bitmapPoolSize: Float val memoryCacheSize: Float val diskCach
2020-11-24 11:58:13 3675 11
原创 Flutter环境搭建与配置
前言作为一名Android开发者,由Java开发到现在的Kotlin开发,很明显已经满足不了市场需求了,现在个别大厂的项目已经使用了FFlutter中文网下载Flutter SDKhttps://github.com/flutter/flutter/releases打开Android Studio安装插件配置Flutter SDK配置Dart SDK安装好后发现File中却没有 New Flutter Project… 选项在网上搜索了一圈原来是 Android APK Supp
2020-09-10 12:53:11 269
原创 多线程下获取随机数的小技巧
前言Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一 seed 导致的性能下降。 Random 实例包括 java.util.Random 的实例或者 Math.random() 的方式。可以直接使用 ThreadLocalRandom 。1.RandomRandom 使用相同的 seed 创建了两个实例,并且对每个实例进行了相同的方法调用序列,则它们将生成并返回相同的数字序列。Tip:Random中的seed是一个Long类型的原子变量AtomicLong对象R
2020-08-27 14:24:23 1285
原创 RecyclerView优雅的实现复杂列表
前言在RecyclerView实现多种Item类型列表时,有很多种实现方式,这里结合DataBinding+Lifecycles实现一种简单,方便,快捷并以数据驱动UI变化的MultiTypeAdapterDataBinding 以声明方式将可观察的数据绑定到界面元素Lifecycles 管理您的 Activity 和 Fragment 生命周期Tip: 对DataBinding和Lifecycles不熟悉的小伙伴可点击查看官方介绍。1. 定义一个基类MultiTypeBinder方便统一实
2020-05-09 21:59:41 1580 5
原创 Android存储路径探索
在Android中访问SDCard的一些路径,用到Environment类,对Environment的一些学习记录。系统根目录,例:/systemstatic File getRootDirectory()返回用户数据目录,例:/datastatic File getDataDirectory()返回下载/缓存内容目录,例:/data/cachestatic File ...
2019-05-11 23:58:06 2868
原创 RecyclerView滚动Item置顶
点击左边RecyclerView中的Item,使右边的RecyclerView的Item滚动并置顶。直接调用RecyclerView中的scrollToPosition(int position)方法,Item每次滚动,仅仅只会滚动到当前视图可见,并不会置顶。调用右边的 RecyclerView 的 LayoutManager 中的 scrollToPositionWithOffset(int...
2018-09-29 13:57:51 2005
原创 Android商品详情页特效
商品详情页效果1.上下滑动改变状态栏背景色2.BottomSheetDialogFragment实现商品筛选弹框3.使用主题属性做兼容性适配布局点击查看Android中Theme相关属性点击下载Demo...
2018-09-14 16:31:06 1797 4
原创 Android中Theme相关属性
状态栏,导航栏 属性 取值类型 描述 android:statusBarColor @color 设置系统状态栏颜色 android:navigationBarColor @color 设置系统导航栏的颜色 android:navigationBarDividerColor @color 在系统导航栏和应用程序内容之间显示指定细...
2018-09-13 18:37:03 2420
原创 解决Fragment中onActivityResult()方法无响应问题
案例1针对在 Fragment 中调用 startActivityForResult(…) 接收 Activity 返回值,Fragment 中的 onActivityResult(…) 无响应问题。 解决思路如下:1.调用 getSupportFragmentManager() 方法,获取到当前 Activity 中的 Fragment 集合。2.遍历该集合,手动调用在当前...
2018-05-22 19:15:40 9561 1
原创 Android中Service的一些总结
关于ServiceService 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。Service分类Ser...
2018-03-16 11:05:52 343
原创 Android架构组件Lifecycle-Aware介绍及使用
关于LifecycleLifecycle 是一个持有(如 Activity 或 Fragment )生命周期状态信息的类,并且允许其它对象观察这个状态。从而在外部实现监听,能够使我们及时释放资源,避免内存泄露和程序崩溃。为什么要使用Lifecycle?常见的观察生命周期的方式,如MVP中在 Presenter 中对 Activity 或 Fragment 的生命周期进行观察,我们要...
2018-03-14 17:55:00 666
原创 Android架构组件ViewModel和LiveData介绍及使用
关于ViewModelViewModel类的设计目的是以一种关注生命周期的方式存储和管理与UI相关的数据。 例如:Activity在配置发生改变时(屏幕旋转),Activity就会重新创建,onCreate()方法也会重新调用。我们可以在onSaveInstanceState()方法中保存数据,并从onCreate()方法中通过Bundle恢复数据,但这种方法只适用于可以对其进行序列化的少量...
2018-03-09 11:47:13 21625 8
原创 Android架构组件Room介绍与使用
关于RoomRoom是Google官方提供的数据库ORM框架,使用起来非常方便。Room在SQLite上提供了一个抽象层,以便在利用SQLite的全部功能的同时能更加流畅的访问数据库。Room中三个主要组件:Database:该组件用来创建一个database holder。注解定义实体的列表,类的内容定义从数据库中获取数据的对象(DAO)。它也是底层连接的主要入口。这个被注解的类是...
2018-03-07 10:13:10 6077
原创 创建遵守REC20协议的数字货币并实现转账及合约验证
MetaMask钱包MetaMask钱包是一个浏览器插件钱包,MetaMask比以太坊提供的客户端钱包要好用很多,更加的方便和快捷,使用时不需要在去同步庞大的区块数据。点击查看MateMask钱包安装教程点击进入MetaMask官网准备就绪后如果账户中没有可用的测试币可按照一下步骤去获取。点击 ROPSTEN TEST FAUCET 按钮跳转到获取页面,向上面的账户...
2018-03-05 15:09:39 3311 2
原创 Android Gradle多渠道打包
1.首先集成友盟统计SDK(友盟集成文档)在Gradle中集成如下: dependencies { compile 'com.umeng.analytics:analytics:latest.integration' }2.在AndroidManifest.xml的application节点下meta-data中配置如下: <meta-data ...
2018-02-27 11:51:39 371
原创 Android Intent FLAG介绍
1.FLAG_GRANT_READ_URI_PERMISSION 临时访问读权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的读权限。2.FLAG_GRANT_WRITE_URI_PERMISSION 临时访问写权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的写权限。3.FLAG_GRANT_PER...
2018-02-27 11:46:41 13184
原创 Android 微信支付
1.阅读文档,配置信息移动应用微信支付商户接入指导文档(按照微信需求填写信息,申请商户ID)开发文档开发工具包和SDK下载 按照以上要求配置信息得到商户Id,在商户平台生成的密钥,AppId,AppSecret。导入微信支付SDK,加入所需权限。一般将这些信息写在一个常量类里面方便维护,如下: /** * 微信支付必备参数 */ ...
2018-02-27 11:45:21 325
原创 Android EditText属性解析
在开发中通常会用到EditText这个控件,在这里对该控件做一个属性解析。EditText的直接父类为TextView,所以TextView所有的属性EditText也有,这点充分体现了Java的特性(继承)。属性分析与说明(基本的就不说了):1.android:hint=”请输入”// 设置显示在控件上的提示信息2.android:textColor=”“//设置文本颜色3.an...
2018-02-27 11:44:07 642
原创 Android沉浸式状态栏适配
1.自定义ToolbarToolbar虽然也提供了setTitle()等一些相应的方法,但都不是自己想要的样式。这里先创建一个layout用作Toolbar内容视图。Toolbar内容视图layout_common_toolbar.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:a...
2018-02-27 11:40:00 735
原创 EventBus的使用以及消息处理
这篇帖子主要针对EventBus做一个简单的介绍使用以及遇到的问题处理。首先EventBus是什么?EventBus是一个消息总线,以观察者模式实现发布者/订阅者模式进行松散耦合的Android开源库。使 Widget,Activity,Fragment,Service以及Thread之间能更好的通信。参考文献EventBus官网地址 EventBus githu...
2018-02-27 11:25:39 1722
原创 Android 7.0 FileProvider适配
Android7.0做了一些权限更改,为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问。此设置可防止私有文件的原数据泄漏,同事Android7.0如果传递 file:// URI 会触发 FileUriExposedException 异常。适配Android7.0 FileProvider的步骤如下:AndroidManifest.xml清单文件的修...
2018-02-27 11:22:50 668
原创 CardView使用与介绍
1.在Android Studio工程中build.gradle中配置如下:dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') // 引用android.support.v7.CardView包 compile 'com.android.support:cardview-v7:23.+'...
2018-02-27 10:19:47 505
原创 kotlin中线程实现的两种方式
线程创建kotlin中创建线程与Java中创建线程一样,都是通过创建Thread对象或者实现Runnable接口来创建线程。创建Thread对象来创建线程// 创建Threadval mThread = CustomThread()// 调用 mThread.start()// ============================================...
2018-02-27 10:01:33 13801 1
原创 kotlin中Handler的定义以及使用
Handler在kotlin中定义以及使用方法:class MainActivity : AppCompatActivity() { // 静态常量 companion object { const val INDEX_KEY = "index" const val NAME_KEY = "NAME" const val F...
2018-02-26 11:56:46 13795
原创 kotlin中的Map集合类
Kotlin中的Map分为: 只读Map。 可变的MutableMap(MutableMap、HashMap、LinkedHashMap)。Map源码:private object EmptyMap : Map<Any?, Nothing>, Serializable { private const val serialVersionUID: L...
2018-02-23 10:52:44 38912
原创 kotlin中的Set集合类
Kotlin中的Set也分为: 不可变Set。 可变MutableSet。(支持增加和删除)不可变Set同样是继承了Collection。MutableSet接口继承于Set, MutableCollection,同时对Set进行扩展,添加了对元素添加和删除等操作。Set,MutableSet源码:// 不可变Setpublic interface Set&l...
2018-02-22 11:02:12 2250
原创 kotlin中的List集合类
Kotlin的集合分类:可变集合类(Mutable)不可变集合类(Immutable)。集合类存放的都是对象的引用,而非对象本身,我们通常说的集合中的对象指的是集合中对象的引用。集合类型主要有List(列表),Set(集),Map(映射)。kotlin中List与Java一样都是实现了Collection接口,源码如下:public interface List&lt...
2018-02-09 14:30:07 26922 2
原创 Gson解析服务端返回的多种类型的JSON
遇到几种Json类型,使用Gson通过自定义解析器解析一下几种类型的返回数据。JSON示例返回Json中data为空{ "data": "", "code": 1, "message": "请求失败"}返回Json中data值为null{ "data": null, "code": 1, &q
2018-02-09 13:48:33 3529 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人