
android
MrFengZH
这个作者很懒,什么都没留下…
展开
-
通过隐式 Intent 启动其他应用程序的活动
前提是知道启动程序的包名、启动活动的类名、以及相应的 IntentFilter 匹配条件。调用方式如下: Intent intent = new Intent(); intent.setAction("com.feng.test2activity.main"); // 该活动的 action 过滤条件 String packageName = "com.feng.test...原创 2020-01-03 16:49:20 · 677 阅读 · 0 评论 -
ArrayMap 源码分析
文章目录概述主要属性构造方法putindexOfNull()indexOfremoveget参考概述ArrayMap 是 Android 的 API,它和 Java 的 HashMap 相比,虽然在查找效率上不如 HashMap(HashMap 查找的时间复杂度是 O(1), ArrayMap 查找的时间复杂度是 O(logn)),但是 ArrayMap 的空间消耗更小,它内部使用数组存储 h...原创 2019-12-19 19:43:15 · 369 阅读 · 0 评论 -
安卓显示或隐藏控件时附带动画效果
前言控件可以通过 setVisibility 方法进行显示和隐藏。默认情况下没有动画效果,直接显示和隐藏有时候显得比较生硬。带有动画效果的显示和隐藏更加优雅,例如在阅读小说时,点击小说弹出设置时,会伴随着滑动的动画。本文就通过这个例子来进行说明,先上效果图:实现下面说下如何实现。在 xml 中创建动画首先在 res 文件夹中新建 anim 文件夹,然后编写要实现的动画。对于上面的动...原创 2019-12-05 14:43:53 · 1416 阅读 · 0 评论 -
Android 连接 MySQL 并进行基本的增删改查操作
准备工作导入 jar 包下载 mysql-connector-java 包(吃过亏的表示推荐 5.x.x 版本,8.x.x 版本会出现挺多问题的):mysql-connector-java 下载地址打开 AS,将 jar 包复制到 libs 文件夹下, 复制完后右键 jar 包,点击 “add as library”,将 jar 包导入相应 module如果导入的 mysql-conne...原创 2019-11-25 15:02:29 · 3582 阅读 · 6 评论 -
Android 利用 shape 实现背景颜色渐变
通过 shape 中的 gradient 可以实现颜色渐变,例如:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient a...原创 2019-11-17 12:09:28 · 2019 阅读 · 0 评论 -
安卓高斯模糊的实现
文章目录前言使用 RenderScript 实现高斯模糊RenderScript 配合 Glide 实现高斯模糊参考前言在 Android 中,实现高斯模糊效果的主要方式有:Java:FastBlur.java,由于在 Java 层做处理,效率较低。Android:RenderScript,原生 API,在 C/C++ 层做处理,效率较高。对比后不难发现 RenderScript 是...原创 2019-11-14 21:10:14 · 1323 阅读 · 0 评论 -
Android 5.0 以上将图片延伸到状态栏的方法
小米 9.0 亲测有效首先附上效果:实现方式:在 styles.xml 中设置相应 Activity的主题: <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 其他设置 --> <!-- 隐藏标题栏和设...原创 2019-11-14 18:06:24 · 2216 阅读 · 0 评论 -
安卓 SQLite 数据库删除前 n 条记录
删除前 n 条记录对应的 SQL 语句是:delete from table where id in(select id from table order by id limit n)其中 table 对应表名,id 表示自增 id。在 SQLite 中执行以下代码即可: String sql = "delete from " + TABLE_NAME + "...原创 2019-11-12 16:43:11 · 2040 阅读 · 0 评论 -
FlowLayout(流式布局)的实现
文章目录前言代码实现(Flowlayout)使用方法1. 编写 item 布局2. 编写 Adapter3. 主活动中使用 FlowLayout参考前言最近在做的项目决定用流式布局来展示历史记录,刚好自己也想学习自定义 ViewGroup,所以就参考了其他的一些文章,写了一个 FlowLayout(流式布局),效果如下:代码实现(Flowlayout)只有一个 FlowLayout 类,...原创 2019-11-10 22:12:27 · 18882 阅读 · 3 评论 -
仿掌阅实现 TabLayout 切换时的字体和 Indicator 动画
文章目录前言分析实现字体缩放动画实现 Indicator 的长度变化动画一、准备工作二、让 TextView 撑满 TabView三、实现滑动时 Indicator 的动画效果写在最后参考前言最近在做的一个小说阅读 APP,打算模仿掌阅实现 TabLayout 切换时的动画效果。首先看下掌阅的切换效果:接下来是我的实现效果:分析切换动画主要有两部分组成:字体的缩放动画:进入页面...原创 2019-11-03 22:02:24 · 2400 阅读 · 9 评论 -
ViewPager.PageTransformer 的 position 分析
文章目录前言ViewPager.PageTransformer 的定义理解 position小结 position 的变化规律参考前言PageTransformer 是 ViewPager 内部定义的接口,实现该接口并通过 setPageTransformer 方法设置后可以实现自定义的 ViewPager 滑动效果。ViewPager.PageTransformer 的定义首先看下该接口...原创 2019-11-03 19:59:40 · 624 阅读 · 0 评论 -
RecyclerView 实现不固定列数的网格布局
RecyclerView 实现网格布局是通过设置 GridLayoutManager 来实现的,通常是这样设置的: mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));这样设置的效果是每一行都有 3 列,很对称。但如果我想要不同行有不同的列数,例如第一行只有一列,而其他行有 3 列。可以这样做: Gri...原创 2019-10-28 17:59:42 · 3474 阅读 · 1 评论 -
解决 Fragment 重叠问题
Fragment 重叠问题的产生因为某些原因(例如旋转屏幕)而导致 Activity 发生重建时,Fragment 也会发生重建。重建的 Fragment 如果没有保存状态,那么它的 mHidden 默认为 false,即 hide 失效,这时所有添加到容器的 Fragment 都会显示出来,就产生了重叠现象。解决问题要解决 Fragment 的重叠问题,关键是要在 Activity 发生重...原创 2019-10-21 17:18:16 · 760 阅读 · 0 评论 -
FragmentTransaction 的 replace, add, hide, show 的使用和区别
引入现在 APP 的主页面大多采用“单 Activity + 多 Fragment”的形式。多 Fragment 的使用需要解决两个问题:Fragment 怎么依附在 Activity 上Fragment 间的切换对于第一个问题,可以利用 FrameLayout 来解决,FrameLayout 可以作为承载 Fragment 的容器,又可以成为 Activity 布局的一部分,这样就可...原创 2019-10-20 19:45:48 · 5866 阅读 · 2 评论 -
揭露动画(RevealAnimator)的基本使用
前言揭露动画是 Android 5.0 的新特性,使用该动画后,在显示或隐藏视图的时候能够给用户提供视觉连续型。效果先上最终的效果图,毕竟只有当你对动画效果感兴趣的时候,才会认真地看它的代码实现。由于是在模拟器上运行,可能有点卡顿,在真机上效果会更好API在讲代码实现前,先介绍下实现揭露动画的 API:ViewAnimationUtils.createCircularReveal 方...原创 2019-10-19 15:41:38 · 981 阅读 · 1 评论 -
Activity 的启动:四种启动模式及各种 FLAG
文章目录启动模式简介预备知识四种模式概述活动生命周期的变化添加 FLAG 后对 Activity 启动的影响Intent.FLAG_ACTIVITY_NEW_TASKIntent.FLAG_ACTIVITY_CLEAR_TASKIntent.FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_CLEAR_TOP参考启动模式简介Activity 有四种不同的...原创 2019-09-15 17:36:08 · 790 阅读 · 0 评论 -
从源码看Dialog到底是属于应用Window还是属于子Window?
在看《Android开发艺术探索》的时候,原创 2018-10-15 16:14:19 · 2418 阅读 · 1 评论 -
源码分析:Activity的启动过程(1)
点击播放点击播放图标后,开始播放音乐,现在分析一下其具体流程首先看MainActivity.java @Override public void onClick(View v) { switch (v.getId()) { //....... case R.id.iv_main_play_and_pause: ...原创 2019-04-26 15:45:29 · 193 阅读 · 0 评论 -
源码分析:Activity的启动过程(2)
文章目录ActivityStackSupervisor#realStartActivityLocked(以下源码都是基于API25)ActivityThread.ApplicationThread#scheduleLaunchActivityActivityThread.H#handleMessageActivityThread#handleLaunchActivityActivityThread...原创 2019-04-26 15:47:13 · 215 阅读 · 0 评论 -
源码分析:Service的绑定过程(bindService)
文章目录ContextWrapper#bindService(除特殊说明外,以下代码都基于API25)ContextImpl#bindServiceContextImpl#bindServiceCommonLoadedApk#getServiceDispatcherLoadedApk.ServiceDispatcher.InnerConnectionContextImpl#bindServiceC...原创 2019-05-24 20:49:11 · 582 阅读 · 0 评论 -
Boardcast Receiver 源码分析:广播的动态注册、发送和接收过程
文章目录动态注册过程ContextWrapper#registerReceiver(以下代码基于API26)ContextImpl#registerReceiverContextImpl#registerReceiverInternalLoadedApk.ReceiverDispatcher#getIIntentReceiverActivityManagerService#registerRece...原创 2019-06-06 15:45:28 · 621 阅读 · 0 评论 -
TabLayout去除点击时的阴影效果
一开始看到一些文章说设置属性app:tabBackground="@android:color/transparent",但我试了之后,发现没有效果。后来受到这篇文章的启发,觉得应该是设置ripple,所以设置了属性app:tabRippleColor="@android:color/transparent",运行后发现真的有效,在这里分享一下这个方法。...原创 2019-06-09 15:46:25 · 4336 阅读 · 3 评论 -
记一次byte[]和Bitmap的转换问题
在利用Socket传输图片的时候,用到了byte[]和Bitmap的相互转换。问题是这样的:首先将自己的Bitmap转换为byte[]传给对方,而对方在收到byte[]后转换为Bitmap,但是明明自己的Bitmap不为null,而对方转换后的Bitmap却为null。我就去找原因,刚好看到有篇文章说这样将byte[]转为Bitmap有问题return BitmapFactory.decode...原创 2019-06-11 16:52:36 · 4719 阅读 · 1 评论 -
源码分析:View的事件分发机制
文章目录前言源码分析Activity#dispatchTouchEventViewGroup#dispatchTouchEventView#dispatchTouchEventView#onTouchEvent小结参考前言事件分发就是将MotionEvent事件分发给一个具体的View来处理的过程。本文将对Activity、ViewGroup和View的dispatchTouchEvent方法...原创 2019-06-23 21:07:19 · 299 阅读 · 0 评论 -
源码分析:View的工作流程
文章目录简介View的工作流程入口DecorView被加载到Window中ActivityThread#handleLaunchActivityActivityThread#handleResumeActivityWindowManagerImpl#addViewWindowManagerGlobal#addView小结开始View的工作流程ViewRootImpl#performTraversa...原创 2019-07-03 17:11:41 · 265 阅读 · 0 评论 -
Service 的生命周期
Service 的生命周期回调主要有这些,onCreate、onStartCommand、onDestroy、onBind、onUnbind、onRebind。根据启动方式的不同,回调又会有不同的顺序,下面列举一下各种情况下,回调的顺序:单种方式启动分两种情况:使用 startService 启动 Service。其生命周期为:onCreate -> onStartCommand...原创 2019-07-23 20:16:56 · 1026 阅读 · 0 评论 -
okio 的使用及源码分析
文章目录简介一些重要的类ByteString 和 BufferSource 和 SinkRealBufferedSource 和 RealBufferedSink简单使用读取文本写入文本源码分析Segment成员变量构造方法poppushwriteTocompact(压缩机制)split(共享机制)SegmentPooltakerecycleBufferreadBytewriteByte超时机制T...原创 2019-07-22 15:06:54 · 489 阅读 · 0 评论 -
RecyclerView 源码分析(一):Recycler
文章目录前言RecyclerView.Recycler主要成员变量RecycledViewPool成员变量主要方法getScrapDataForTypesetMaxRecycledViewsgetRecycledViewputRecycledViewViewCacheExtension主要方法getViewForPositionrecycleView补充mChangedScrap 和 mAttac...原创 2019-08-04 18:46:58 · 310 阅读 · 0 评论 -
ListView 源码分析
文章目录前言RecycleBin类注释主要成员变量主要方法onLayoutAbsListView#onLayoutListView#layoutChildrenListView#fillFromTopListView#fillDownListView#makeAndAddViewAbsListView#obtainView第二次 layoutListView#layoutChildrenListV...原创 2019-07-31 18:44:15 · 444 阅读 · 0 评论 -
RecyclerView 源码分析(二):布局
文章目录前言onMeasureonLayoutRecyclerView#dispatchLayoutStep1RecyclerView#processAdapterUpdatesAndSetAnimationFlagsRecyclerView#dispatchLayoutStep2LinearLayoutManager#onLayoutChildren1. 找到锚点(auchor 点)update...原创 2019-08-06 15:01:43 · 472 阅读 · 0 评论 -
ripple实现点击时的水波纹效果
文章目录前言实现的效果ripple的使用注意前言在看网易云音乐播放器的时候,觉得它在选择音乐时候的波纹效果很好看,就想要模仿这种效果。然后在网上找了一下这方面的文章,最后被我发现了ripple,用ripple就能很好地实现这种波纹效果。所以用这篇文章记录下ripple的实现,如果发现我的代码有问题,欢迎大家指出。实现的效果ripple的使用首先在res目录下新建一个drawable-v...原创 2018-10-14 16:05:58 · 991 阅读 · 0 评论