暂时未有相关云产品技术能力~
Android方面10年以上经验,掘金平台优质作者
ios中可以直接使用苹果官方提供的map——MapKit。在SwiftUI中如何使用MapKit网上有也有不少文章,但是大部分不详细,大部分只是简单的展示出地图。所以本文来详细的讲解一下如何使用MapKit的各项功能。
1、改变Toolbar高度(解决图标不垂直居中) 背景:实际使用中,toolbar默认高度有些大,会挤压内容。想将toolbar高度改小,将layout_height从wrap_content改为固定值。 情况:toolbar的layout_height比默认高度小的时候,发现标题是居中的,但是两侧的图标不垂直居中而偏下了 调查:网上有很多方法,基本都是无效的。甚至有人利用反射直接修改图标的imageview的gravity,非常复杂且右侧图标无法实现。
在vue中,路由router可以有两种模式可选:hash和history。设置方式就是设置Router的mode属性
ImageView是android开发过程中经常会使用的一种组件,由于android屏幕碎片化的问题,有时候我们无法设定一个具体的宽高。比如说width是match_parent的,这时候我们还想让图片在宽度完全填充并能正常显示,我们直接会想到将height设置为wrap_content。但是用过的同学都知道ImageView的实际区域要大于图片区域
我们在android开发过程中可能会遇到一种情况,一个组件需要保持固定的宽高比,但是组件本身大小却不定。比如我们需要让一个组件宽度与屏幕宽度一致,这样就无法确定宽度。那么如何让控件保持固定宽高比?有几种方法供大家选择。
在Android中,xml文件经过编译后都是不可读的二进制文件。今天我们来解析一下这个二进制文件的内容,看看如何与我们的源码进行对应。
生命周期 flutter的生命周期其实有两种:StatefulWidget和StatelessWidget。 这两个是flutter的两个基本组件,名称已经很好表明了这两个组件的功能:有状态和无状态。
生命周期 flutter的生命周期其实有两种:StatefulWidget和StatelessWidget。 这两个是flutter的两个基本组件,名称已经很好表明了这两个组件的功能:有状态和无状态。
我们学习flutter一开始接触的路由管理就是Navigator1.0,它非常方便,使用简单
目前,移动端大致通过三种方式来进行设备定位:GPS、基站、wifi。本文就详细的讲解一下这几种定位方式和实现方法。
自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle 进行发布。该格式将取代 APK 作为标准发布格式。虽然这个政策目前还无法影响到国内应用,但是作为Android开发者,对于新的动态还是要有一定的认识。本文并不是介绍Android App Bundle,因为它不是新的事物,相关的文章也有很多了,本文重点介绍的是Android App Bundle中“动态功能模块”的实际应用。
本文先介绍ActivityResult的基本使用,最后会通过源码来探讨背后的原理。 在Android中,我们如果想在Activity之间双向传递数据,需要使用startActivityForResult启动,然后在onActivityResult中处理返回,另外申请权限也是类似的步骤。 但是这样的处理方式会让我们的代码变得非常复杂,并且也无法保证在 Activity 发送或接收数据时参数的类型安全。
在之前的文章中,我们实现了带有header和footer功能的WrapRecyclerView。 现今App中列表的下拉刷新和上拉加载已经是一种习惯了,这两个操作也确实方便很多。 为RecyclerView添加这个功能可以通过多种方法,这里我选用了一种简单的做法。基于pulltorefresh这个库。
我们经常会遇到在一个list中删除一条数据,这时候一般会有一个飞出的动画效果 在RecyclerView中可以通过setItemAnimator函数设置一个ItemAnimator,实现item的add、remove、change等动作的动效。下面我们就通过ItemAnimator来实现上面的效果。
spinner就是下拉选择组件,系统自带的spinner使用起来非常方便,首先定义一个array(strings.xml),如下: <array name="grade"> <item>一年级</item> <item>二年级</item> <item>三年级</item> <item>四年级</item> <item>五年级</item> <item>六年级</item> </array> 复制代码
本篇文章我们实现一个简单的动画效果,目的是熟悉和加深Android属性动画的使用。另外这次我们使用kotlin来进行开发,不熟悉kotlin的同学可以自行简单了解一下kotlin语法,基本应该能看懂 我们知道,android的View Animation动画可以移动、放大等效果,但是不能改变布局的实际属性。比如使用scaleAnimation使布局缩放,但是布局的实际大小并没有改变,所以会遮盖旁边的布局,并不是把布局撑开,挤压其他布局。 作者:BennuCTech 链接:https://juejin.cn/post/7044701115316699143 来源:稀土掘金 著作权归作者所有。商
这个效果是多年前做电商的时候的一个需求,当时是模仿一个叫喵街的app(也不知道现在还在不在了)
我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape。目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大的帮助。这个文章我们对这21种标签做一个介绍,让大家有一个印象。 本文中有些资料取自网上,当时记录在笔记中,但是由于时间久远,忘记出处了。
我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape。目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大的帮助。这个文章我们对这21种标签做一个介绍,让大家有一个印象。 本文中有些资料取自网上,当时记录在笔记中,但是由于时间久远,忘记出处了。
RSA算法是最重要的算法之一,它是一种非对称加密,是目前最有影响力的加密方式之一。这篇文章我们通过实现一种简单的RSA加密来探究它的原理。
这是我之前一篇老文章了,重新整理了一下在掘金发一下,大家可以参考参考。 RecyclerView是Android 5.0版本引入的一个新的组件,目的是在一些场景中取代之前ListView和GridView,实现性能更优的解决方案。同时RecyclerView的灵活性让它可胜任更多的场景。关于RecyclerView的使用有太多的文章了,大家可以自行搜索。 我们知道RecyclerView很灵活,灵活到很多功能需要我们自己实现,比如ListView和GridView中最常用的Item点击事件。所以在使用了几次后,我准备自己封装一个WrapRecyclerView,实现一些非常常用的功能。
本篇是基于AnimationListView框架的,这个框架在上一篇中详细的讲解了,建议阅读本篇前先熟悉 《Android魔术系列:一步步实现对折页面》。 在上一章中我们实现对折的效果同时实现了一个AnimationListView的框架,在这个框架下我们可以实现很多效果。 本篇文章我们就在这个框架下实现一个百叶窗的效果
本篇文章讲解如何实现一个水晶球波浪进度条
这是很久之前的一篇文章了,最近有人提到了就想起来了,正好在这里还没发布过,就重新整理一下发出来吧。这个系列也搁置了很久了,看看能不能重新启动起来。 本篇文章主要去实现一个对折页面的效果,主要来学习Android中的截屏、Bitmap处理及canvas绘制这些知识。
安装nodejs和npm 这个就不细说了,网上有很多相关资料。 注意,如果npm版本低可能不行,升级npm使用命令: sudo npm install -g npm 查看npm版本使用命令 npm -v
我们知道在jni中执行一个java函数需要调用几行代码才行,如 jclass objClass = (*env).GetObjectClass(obj); jmethodID methodID = (*env).GetMethodID(objClass, methodName, methodSig); jobject result = (*env).CallObjectMethod(obj, methodID, ...); 这样使用起来很不方便,尤其当需要大量的调用java函数就会产生大量的上述代码,由此我产生了一个开发封装这些操作的工具类,以便大量简化我们的开发。 作者:Benn
本来没有问题的一个项目,有一天打开后c++文件中jni库都报红,但是并不影响运行,但是非常影响开发。
SearchView是appcompat-v7中的一个组件,能够更快的实现一些基本的功能 但是在布局中使用android.support.v7.widget.SearchView,打开该页面会crash,查看错误是加载布局出问题了
前两天华仔给我出了一道难题,我们俩研究了小半天,借着这个契机正好回顾了一下Android事件分发的相关知识点,于是有了这篇文章。 Android事件分发机制大家都非常熟悉,大部分文章对这个过程的描述都是开始于Activity,但是事件是怎么传到Activity的? 这里就涉及到几个重要的部分:Window,WMS,ViewRoot和DecorView。 如果要理解事件分发的源头,就需要搞明白他们之间的关系,所以我们先来看看它们到底有什么关系?
小盒的直播业务一开始是打算用两套引擎切换使用的,所以需要封装一下。而且因为声网和阿里的直播sdk的官方文档都不是很全面,甚至有的还有错误(可能是文档没及时更新)导致无法正常运行,接入时问题多多,所以同时记录一下的接入过程中的问题及处理。
本文基于PineAppRtc开源项目github.com/thfhongfeng… 因为一个需求,我们需要将WebRtc发送过来的视频流中转出去,所以就研究一下WebRtc是如何接收视频数据并进行处理渲染的,于是有了这篇文章。
glide的内存缓存有两级:LruCache、ActiveResources 其中LruCache老生常谈了,这里就不细说了。 ActiveResources实际上内含一个HashMap,Map中value则是资源的弱引用。 那么这两级是如何工作的?
本文介绍一下如何在linux下安装nginx,并配置反向代理,使我们可以通过子域名访问不同的接口。
本文是基于PineAppRtc开源项目github.com/thfhongfeng… 因为一个需求,我们需要将一个视频流通过WebRtc发送出去,所以就研究一下WebRtc是如何采集视频数据并进行处理发送的,于是有了这篇文章。
本文是基于PineAppRtc项目github.com/thfhongfeng… 在webrtc中音频的录制和播放都是封装在内部,一般情况下我们也不需要关注,直接使用即可。 但是最近有一个需求,需要将我们自己的数据进行传输,所以就需要将这些接口暴露出来使用。所以就需要去研究一下它的源码,就有了这篇文章。
我们使用Activity的时候,可以通过startActivityForResult来启动一个新的Activity,然后在新的Activity中可以用setResult来向前一个Activity回传一些结果信息,前一个Activity会在onActivityResult中得到这个信息。 那么当我们使用Fragment的形式来作为页面的时候呢?我们知道可以使用setArguments向后面的Fragment传递信息,但是如何回传结果信息? 作者:BennuCTech 链接:https://juejin.cn/post/7033953422357299231 来源:稀土掘金 著作权归作者所有。商
利用Collator类可以轻松实现排序,但是我们可能有各种model都需要进行排序,这样就会有一个问题,如果单独为每个model写一段排序代码,代码重复量很大。 所以我打算写一个通用的工具,使用泛型+注解+反射的方式来解决。
做了很多项目,发现每个项目里都有大量的相似图标,比如每个颜色一种、每个角度一种(左箭头、右箭头)等等,虽然这些图标很小占用不了太多资源。但是当我们需要change的时候就得一个个去替换,其实在android里有很多小技巧可以让这些资源进行复用,减少体积的同时也可以使项目结构更加清晰。 这里总结的一些比较常用的复用,包扩:自适应、变色、旋转、阴影、组合、透明度、剪裁、留白等
在mongodb的官网中有linux各个系统的安装配置说明 docs.mongodb.com/master/admi… 本文以CentOS(RedHat)为例 docs.mongodb.com/master/tuto… 结合官方说明,并加以补充。
在mongodb的官网中有mac环境的安装配置说明 docs.mongodb.com/master/tuto… 在mac上安装mongodb有两种方式: (1)使用Homebrew来安装,如果电脑中有Homebrew,安装起来就比较简单,如果没有可以安装一个,以后安装其他的也用的到。 (2)如果电脑没有Homebrew且不想安装,那么直接用压缩包的形式安装也可。 我比较懒不想安装Homebrew,所以本文就介绍以如何压缩包的形式安装并配置mongodb,本文会在官网教程的基础上做了一些说明和补充。
Android的事件分发机制也是老生常谈了,这篇文章并不是笼统的介绍这个机制,而是针对ACTION_DOWN这个事件探讨相关的细节。
我们知道在事件分发过程中是存在一个拦截机制的 onInterceptTouchEvent 当它返回true则不向下分发事件,否则向下分发。 但是在这个过程中,还有一个参与者:requestDisallowInterceptTouchEvent,这个函数直接影响事件的拦截。我们今天就来说一说这个这个函数是如何影响事件分发的。
问题出现 有两种情况: 一种情况是打开activity时webview开始加载页面,但是发现加载了一部分后就停止了,余下的一直不再加载。但是当关闭这个activity时发现webview又继续加载了。 第二种情况是webview正常加载,但是进行操作时发现有些操作没有反应。比如接入支付宝国际sdk,未装支付宝app而使用h5页面时出现点击无反应的情况。
安装nodejs 首先在服务器上安装nodejs并配置环境,这个可以参考官方的文档,就不细说了
因为3.2内存设置的一些问题,需要升级到3.4,网上查了一下mongo不能跨版本升级,所以只能3.2先升级到3.4,再往上升级。 目前3.4足够我使用,所以升级到3.4就可以了。但是网上升级都比较复杂,因为都是大系统,而我只是一个小系统,单一的服务和数据库。所以网上的文章基本没有,我参考了一些和官网的一些,总结了简单的升级过程。 文章中的系统环境是CentOS
最近在开发语音评测功能的时候,发现在公众号中使用弛声sdk进行录音评测的时候,录音结束后到返回评测结果比较慢,在做小程序相关功能的时候则明显快多了。那么这里面有什么不同么?为什么公众号sdk这个过程耗时更长?
自己有一个测试用的服务器,配置很低。年前出现几次问题,重启后就好了也就没注意。后来越来越频繁就调查了一下,发现重启后内存就一直增长直到接近100%。使用ps aux查看cpu和内存使用情况,发现mongo占用了大部分的内存,这是什么情况?
我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件。而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同的是它依然需要root环境。本文就以Android为例来详细说说如何安装并使用它。
在我们的项目架构中,一定存在一些基础的模块,这些模块可以在多个app上通用,这种情况我们一般会将这些模块封装成Android Library统一维护,并上传到仓库方便其他小组使用。仓库可以选择如mavenCentral这类公开的仓库,但是我们一般选择搭建自己的maven私有仓库,比如:Sonatype Nexus。本文就一步步的教大家如何将Android Library发布到maven私有仓库。
上一篇文章Flutter混合开发:Android中如何启动Flutter中我们介绍了如何在Native(Android项目)中启动Flutter,展示Flutter页面。但是在开发过程中,很多时候并不是简单的展示一个页面即可,还会涉及到各种交互,比如传递一些消息。 本篇文章就简单介绍一下Flutter与原生Native的三种交互方式: BasicMessageChannel、MethodChannel和EventChannel。