自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Python与数学——使用Processing绘制高次方程图像

首先绘制通用的作图网格,方便观察结果,具体步骤及说明在代码注释中给出,如下所示:# 1.设置图像的x值和y值范围# 设置x的最小值和最大值xmin = -10xmax = 10# y的最小值和最大值ymin = -10ymax = 10#计算x值和y值得范围rangex = xmax - xminrangey = ymax - ymin# 2.用比例尺放大图像坐标# 因为我们要作图的大小不是600像素*600 像素,而是xrange*yrange,所以要将图像中的坐标映射到 Pro

2021-06-27 20:52:32 1585 1

原创 Android绘制优化与内存优化

文章目录一、绘制优化1.绘制原理2.卡顿原因3.使用GPU渲染模式分析工具进行分析4.使用系统跟踪Systrace工具进行分析5.使用CPU分析器工具进行分析5.1使用 Debug API 记录 CPU 活动5.2导入跟踪数据6.使用布局优化工具进行分析6.1使用布局检查器和布局验证工具调试布局6.2 Android Lint工具7.布局优化方法7.1合理运用布局7.2使用Include标签来进行布局复用7.3使用Merge标签去除多余层级7.4使用ViewStub来提高加载速度8.避免GPU过度绘制二、内

2021-03-23 15:42:21 738

原创 Android解决监听AppBarLayout的滑动状态来动态设置标题时报requestLayout() improperly called by错误问题

在使用 CollapsingToolbarLayout 时,需要动态监听滑动状态 OnOffsetChangedListener,并且在滑动回调方法中设置控件属性,但是这时会出现无限循环报requestLayout() improperly called by com.google.android.material.appbar.CollapsingToolbarLayout{859b2c4 V.ED..... ........ 0,0-1080,171 #7f0a0075 app:id/collapsi

2021-03-01 22:09:40 2925 1

原创 Android使用自定义View实现仿keep6.132.0版本用户头像带进度条圆圈效果

要实现的是Keep的这个部分:先直接看实现后的效果图:就是这个,通过点击应用发现,界面中不止一处用到了这个组合作为头像,因此需要我们进行一下封装。为了方便不同界面的调用,我们写一个自定义的View,这样就可以在xml布局文件中直接进行使用了。先来分析一下界面,初步可以看到有四个部分,先是整体的大白圆形背景,之后是灰色的虚线,灰色虚线上面覆盖着绿色的虚线,最后是中间部分的头像照片。因此我们可以分为两部分来进行开发,即头像照片是一部分,其余为一部分。我们首先来写非照片部分,也就是圆形和圆弧的部分

2021-02-21 23:07:02 1116

原创 一个简单的例子讲讲在Android开发中使用组合模式构建布局

在一个简单的例子讲讲在Android开发中构建布局建造者一文中我们说到了使用建造者模式对一系列预定的布局视图进行线性布局的填充,但是这里面有一个问题:在这个例子中,我们只是处理了文本,而不适合嵌套布局。这种其实并不是一个泛用性特别大的动态填充布局,而要使动态填充布局真正有用,就需要一个能在布局层次结构的任意级别上添加任意类型的小部件或者视图,也就是应用到了我们这次要讲的组合模式构建布局。简单说来就是,之前的建造者模式构建布局是以一种线性的方式工作,一次添加一个对象,而我们这次要用的组合模式既可以添加对象组

2021-02-07 23:03:54 254 1

原创 一个简单的例子讲讲在Android开发中构建布局建造者

我以前在做通信业务中,遇到过需要根据字段动态构建和填充UI的需求。而Android布局非常适合用建造者模式来构建来自各个视图组件的布局和视图组。比如,我们经常会用AlertDialog.Builder来构建布局,它们就是由有序的较小对象集合而组成的。现在我们遵循建造者模式,来用一系列预定的布局视图进行线性布局的填充:我们需要创建两种布局项,分别是标题视图和内容视图,然后再构建一个可以由构造者构建的具体Demo。①创建一个视图类接口。interface LayoutView { fun layo

2021-02-05 16:40:27 136

原创 一个简单的例子讲讲Android开发中的标准模式(过滤器模式)

标准模式(过滤器模式)可以根据设定的标准过滤对象。现在我们来举个例子:一个生鲜App,我们可以根据商品的产地、以及是否为蔬菜进行过滤。①创建过滤接口。/** * 过滤接口 */interface Filter { //过滤准则 fun meetCriteria(ingredients:List<Ingredient>):MutableList<Ingredient>}②创建商品原料类。/** * 原料类 * @param name:原料名称

2021-02-04 16:13:57 227

原创 一个简单的例子讲讲Android开发中的适配器模式

适配器我们经常用,比如在写RecyclerView的时候,这是现成的适配器。对于适配器的目的,举个生活中的例子:我们在美国买个水牙线带回国内,就不能直接用,因为电压不同,这时候就需要能转换电压的适配器登场了,通过这个适配器,我们就能在国内用这个美国带回来的水牙线了。放在开发工作中也一样,很多情况下,接口不匹配。解决接口不兼容问题的一个方法是更改接口本身,但这样做有可能会导致牵一发而动全身。有了适配器就不一样了,它能够允许我们在不真正破坏整体结构的情况下大规模更改软件。假设我们在开发维护一个软件园内部送

2021-02-03 23:48:36 357

原创 一个简单的例子讲讲Android开发中的策略模式

策略模式是一种广泛使用并且非常有用的模式,主要在于它的多功能性,因为它可以在许多情况下应用。举个例子:有个购物App,假定有3种支付方式——花呗、货到付款和商家自己的支付系统。使用花呗的人需要支付花呗手续费,使用货到付款的人只需按照定价支付,使用商家自己的支付系统的人将获得10%的折扣。现在我们使用策略模式来完成这个功能的开发。①从写一个接口开始interface Strategy { //处理付款 fun processPayment(price:Float):String}

2021-02-03 17:06:51 290

原创 Flutter在macOS安装下的两个坑

今天安Flutter,前前后后折腾好几个点,先说下我的环境:macOS版本:10.15.7Android Studio版本:4.1第一个坑,即使在Android Studio中安装了Flutter插件,在执行flutter doctor时也会报“Flutter plugin not installed; this adds Flutter specific functionality.”错误,如下图所示:查了好久,排除了Android Studio版本升级残留问题后,最终在flutter安装iss

2021-01-29 15:34:43 458

原创 Android——简单易懂说原理之PMS、IMS和Binder

写在前面:这次给大家推荐一个看源码的网站,虽然不能调试,但是看起来很方便。Android OS在线源码目录一、PMS1.PackageInstaller的初始化与安装APK过程2.PMS对APK安装过程的处理3.PMS的构造方法分析4.App的安装流程整体回顾与其他补充二、IMS三、Binder一、PMSPackageManagerService(PMS)是包管理机制的核心,负责对包进行管理。AMS总是会使用PMS加载包的信息,将其封装在LoadedApk这个类对象中,然后我们就可以从中取出在Andr

2021-01-26 22:24:34 1549

原创 Android——简单易懂说原理之Hook技术与插件化原理

写在前面:关于插件化涉及到的实在是太多了,这里强烈推荐大家看一看包建强的《Android插件化开发指南》。另外关于本文内作为示例的VirtualAPK,最后一次更新是2018年,兼容到Android9.0。大家也可以看看腾讯在2019年开源的 Shadow。目录一、Hook技术1.Activity的startActivity方法2.Content的startActivity方法二、插件化原理1.Android 9.0前使用Hook技术实现Activity插件化1.使用占坑Activity通过AMS校验2.

2021-01-13 19:26:07 822

原创 Android——简单易懂说原理之ClassLoader与热修复原理

写在前面:终于写到热修复原理了,在阅读本文之前最好能有点JNI和JVM基础,相关的文章挺多的,我就不写了,不过我也会尽量将相关的知识穿插进来,减少学习成本。目录一、Android ClassLoader一、java中的ClassLoader与Android中的ClassLoader二、Android中的ClassLoader类型与继承关系三、Android ClassLoader的加载过程二、热修复原理一、Android ClassLoader一、java中的ClassLoader与Android中的

2021-01-05 16:13:26 409

原创 Android——简单易懂说原理之Context、Activity任务栈模型、WindowManager、Window以及WindowManagerService

写在前面:本文既是对“简单易懂说原理”系列前三篇文章的一个补充说明,也是对一些常用应用开发涉及到类的一个原理讲解。目录一、上下文对象Context二、Activity任务栈模型三、WindowManager四、Window五、WindowManagerService一、上下文对象ContextContext是一个应用程序环境信息的接口,通俗点说,Context是一个场景,代表与操作系统交互的一个过程。我们知道,Activity、Service和Application都间接地继承自Context,所以我

2020-12-27 23:13:45 599 1

原创 Android——简单易懂说原理之Android四大组件工作过程(热修复、插件化基础2)

写在前面:这是“简单易懂说原理(热修复、插件化基础)”系列的第二篇文章,也是理解插件化原理的必备基础。阅读本文前须有Android系统启动流程及应用程序进程启动过程相关基础。目录一、根Activity的启动过程二、Service的启动与绑定过程三、广播的动态注册、发送和及接收过程四、Content Provider的启动过程在前一篇文章中我们说到应用程序进程在创建的同时也创建了Binder线程池和消息循环。其实,在创建了Binder线程池后,应用程序进程还会创建并运行一个代表主线程的ActivityTh

2020-12-22 22:09:46 414 2

原创 Android——简单易懂说原理之Android系统启动流程及应用程序进程启动过程(热修复、插件化基础)

写在前面:这是“简单易懂说原理”系列的第二篇文章。有很多阅读源码的讲解文章,其实很多人是看不进去的,比如我,一堆源码当时能看懂,但是在脑中形成不了图,正所谓记得快忘的也快,所以这次准备利用图表+文字的形式来尝试用简单易懂的方式来讲述下常见功能的背后原理。这次准备写一些比较底层原理的东西,但是又不想受制于系统版本的限制,基本是一个共通的原理。目前的想法应该会是一个由几篇文章组成的一个系列。写这个系列的初衷是现在无论是热修复还是插件化都太火了,但是不懂底层原理仅会用框架这种,一旦环境有变化,或者原有框架不再维

2020-12-18 21:22:00 516 3

原创 Android——简单易懂说原理之View的点击事件分发机制

第一次写自定义View还是在14年春节,之前公司有个通信的项目,里面有个图形化展示OCC或者ODF的端子状态界面。最早都是用XML手动嵌套的,直接写死了一排是12个端子,一个子框里有6排。后来随着业务的增长,一排12个端子显然不能满足需求,一开始是手动写一排16个端子和一排8个端子的XML,终于有一天变为需要用户自定义端子排数和每排端子数了,于是自定义一个端子的View也不得不提上日程。罗里吧嗦地说了一堆前言没进去正题,我的意思是说,自定义View很常见,在自定义view过程中,了解机制也很重要。当然,

2020-12-03 17:52:29 459

原创 Android_Jetpack:Paging组件之BoundaryCallback的使用

Paging组件除了单纯地支持网络、数据库为数据源外,还支持网络+数据库的架构方式,这就用到了BoundaryCallback。本文我们会使用PositionalDataSource方式加载数据,来简化多数据源应用的复杂度。BoundaryCallback的使用流程如下:通过流程图可知,数据库是页面的唯一数据来源:页面订阅了数据库的变化,当数据库中的数据发生变化时,会直接反映到页面上。若数据库中没有数据,会通知BoundaryCallback中得到onZeroItemsLoaded方法;若数据库中

2020-11-28 12:47:16 650

原创 Android_Jetpack:Paging组件之PageKeyedDataSource的MVVM使用

PageKeyedDataSource是比较常见的一种DataSource,适用于数据源以“页”的方式进行请求的情况。例如,请求参数为page=2&pagesize=10,则表示数据源以10条数据为一页,当前返回第二页的5条数据。接下来首先来按照MVVM架构跑通一个笑话大全数据接口,这里使用的是最新笑话接口,key是我自己注册的。接口:http://v.juhe.cn/joke/content/text.php?key=您申请的KEY&page=1&pagesize=10接口返

2020-11-27 12:50:44 1359 3

原创 Android_Jetpack:DataBinding之自定义BindingAdapter的创建与使用

写在前面:关于DataBinding,感觉用的人不是很多,毕竟这是一个服务于XML的,如果要是单纯的用来绑定控件,用ViewBinding或者Kotlin的Kotlin-android-extension也都够用了。上网查了查,也有很多关于DataBinding坑很大的说法,这里贴一篇郭神的文章来解个惑。犹豫要不要用DataBinding?这篇文章帮你解惑关于DataBinding的用法资料一堆,这篇文章主要说的是自定义BindingAdapter的创建与使用。通过观察源码不难发现,自动生成的View

2020-11-24 16:48:34 1400

原创 Android_Jetpack:Room与LiveData、ViewModel的结合使用

如果不使用LiveData自动获取数据的变化,那么当每次数据库中的数据发生变化时,我们都要开启一个工作线程去重新获取数据库中的数据。比如说,在进入页面时,要获取数据库中全部学生信息列表,一般我们会这么写:thread{ studentList = studentDao.getStudentList() as MutableList<Student> runOnUiThread { arrayAdapter = ArrayAdapter(this,android

2020-11-23 16:26:30 1401

原创 Android_Jetpack:LiveData原理及使用ViewModel+ LiveData实现Fragment间的通信

说实话,一开始接触LiveData的概念,是通过郭神的《第一行代码(第三版)》,但是一股脑的各种概念铺天盖地而来,导致的后果就是面对LiveData莫名地有种恐惧,所以这也是我开始专门研究Jetpack的一个初衷(题外话,在小公司写传统业务代码,真的是可以用10年前的技术吃一辈子,严重脱节)。一、LiveData原理说回LiveData,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当该数据发生变化时,观察者能够获得通知。由于在LiveData内部默认已经实现好了观察

2020-11-22 16:04:19 1109

原创 Android_Jetpack:ViewModel原理

这次回来重新写Android,发现现在都用MVVM模式了,想想也是,以前用MVC,随着业务扩展,Activity代码量越来越大,改着改着就牵一发而动全身了。当然,最麻烦的还是随着屏幕的旋转的界面重新初始化处理。所以这也是ViewModel深得我心的一个原因。ViewModel独立于配置变化,所以屏幕旋转所导致的Activity重建并不会影响ViewModel的生命周期,大概就是下面这个图的样子。通过查看ViewModel源码可以看到,ViewModel是一个抽象类,里面有一个onCleared()方法

2020-11-22 13:05:03 350

原创 Android_Jetpack:Navigation组件之深层链接DeepLink的使用

DeepLink有两种应用场景,一种是PendingIntent,另一种是真实的URL链接,利用这两种方式都可以跳转到程序中指定的页面。一、PendingIntent方式PendingIntent方式一般用在通知中。当应用程序接收到某个通知时,并且希望用户在单击该通知时直接跳转到到展示该通知的页面,就可以通过PendingIntent来完成。以下代码实现的功能是,在MainActivity中单击按钮弹出通知栏,点击通知栏跳转到指定NotificationActivity页面中,这里Notificati

2020-11-21 17:49:43 2574 3

原创 Android_Jetpack:NavigationUI的使用——以ActionBar为例

NavigationUI对3种类型的App bar提供了支持,分别是ActionBar、Toolbar和CollapstingToolbarLayout。另外,除了最常见的menu菜单,NavigationUI还可以配合App bar左侧的抽屉菜单(DrawLayout+NavigationView)和底部菜单(BottomNavigationView)。现在需要实现以下功能:有MainFragment和SecondFragment,这两个Fragment同属于NavigationTestMainActi

2020-11-19 18:40:58 818

原创 Android_Jetpack:Navigation初见以及使用safe args插件传递参数

在Navigation出现以前,对Fragment的管理是一个比较麻烦的事,尤其是使用FragmentManager和FragmentTransaction来管理Fragment之间的切换。在15年我开发iOS的时候就在想,要是Android也能像这样方便该有多好。现在,JetPack提供了一个名为Navigation的组件,可以方便管理页面和App bar。目录一、Navigation的主要元素二、Navigation的使用1.创建2.使用NavController进行页面切换3.添加页面切换动画效果三

2020-11-19 15:30:22 2718 3

原创 Android_Jetpack:LifeCycle在Activity/Fragment、Service以及Application中的应用

Android_Jetpack:LifeCycle在Activity/Fragment、Service以及Application中的应用一、使用LifeCycle解耦Activity/Fragment与组件二、使用LifeCycleService解耦Service与组件三、使用ProcessLifecycleOwner监听应用程序的生命周期最近重新捡起了Android开发,对Jetpack很感兴趣,就专门研究了下。这篇主要讲的就是系统组件与普通组件解耦的LifeCycle。LifeCycle可以帮助开发者

2020-11-18 13:38:40 820

原创 Python-pandas拆分列与堆叠列

1.拆分列将原数据的指定列按照列的内容拆分为新的列(相当于Excel中的数据透视表)有原始数据格式如下:需要将type列拆分为按照type值为列,值为monetary值的表,如下:代码可以写为:#将原数据的指定列按照列的内容拆分为新的列def pivot(): table=pd.DataFrame({'cust_id':[10001,10001,10002,10002,10003], 'type':['Normal','Special

2020-08-10 12:13:50 3606

原创 会员数据化运营应用场景与分析模型

前言:个人认为只空懂技术不懂落地场景的数据分析师迟早是会被淘汰的。现在机器学习AI驱动数据分析已经很成熟了,大多数的中小型企业的运营人员一旦掌握了基础的模型,利用他们丰富的业务知识,取代业务知识不扎实的初级数据分析师也只是迟早的事情。宋天龙的《Python数据分析与数据化运营》一书,是我目前读过的比较好的一本能够结合业务和技术两方面的书籍。本文内容就是基于这本书为框架结合自己经验撰写。1.会员数据化运营应用场景1.1会员营销数据化运营应用于会员营销主要体现在以下几个方面:以信息化的方式建立基于会

2020-07-29 13:05:30 3473

原创 Python——数据分层抽样

分层抽样,即先将所有个体样本按照某种特征划分为几个类别,然后从每个类别中使用随机抽样或等距抽样的方法选择个体组成样本。分层抽样能明显的降低抽样误差,并且便于针对不同类别的数据样本进行单独研究,因此是一种较好的实现方法。该方法适用于带有分类逻辑的属性、标签等特征的数据有数据如下:最后一列为分类标签,用0或者1来表示导入包import numpy as npimport random读取数据,并查看分类标签data2 = np.loadtxt('data_preprocessing_data

2020-07-17 16:41:28 8607 1

原创 Python探索性数据分析——异常数据的检测与处理、数据的描述(集中、分散、分布、相关关系、波动)、数据的推断(正态性检验、卡方检验、t检验)

目录一.异常数据的检测与处理1.异常数据检测与处理-基于箱线图2.异常数据检测与处理-基于正态分布特征二.数据的描述1.数据的集中趋势1.1.数据的集中趋势-平均值1.1.1.算数平均值1.1.2.加权平均值1.1.3.几何平均值1.2.数据的集中趋势-中位数和四分位数1.2.1.中位数1.2.2.四分位数1.3.数据的集中趋势-众数2.数据的分散趋势2.1.数据的分散趋势-方差与标准差2.2.数据的分散趋势-极差与四分位差2.3.数据的分散趋势-变异系数2.4.数据的分散趋势-describe方法3.数据

2020-07-15 13:06:47 3523

原创 Python常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总

内容概览:本文主要介绍有关数据探索和处理的常用技术,包括“脏”数据的判别与清洗、数据子集的筛选、多表之间的操作以及分组统计方法。由于针对具体操作相关文档太多,所以本文内容涉及具体操作较少,主要是讲方法。本文内所用到的包:import pandas as pdimport numpy as np一.数据的概览与清洗读入数据:data3=pd.read_excel(‘data3.xlsx’),本节之后操作以data3为基础1.数值类型的判断和转换拿到一个数据后,通常需要进行如下操作,这也是一

2020-07-14 17:08:32 1400

原创 Python——线性回归模型的应用

前言:线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(即自变量)来预测某个连续的数值变量(即因变量)。例如餐厅根据媒体的营业数据(包括菜谱价格、就餐人数、预订人数、特价菜折扣等)预测就餐规模或营业额;网站根据访问的历史数据(包括新用户的注册量、老用户的活跃度、网站内容的更新频率等)预测用户的支付转化率;医院根据患者的病历数据(如体检指标、药物复用情况、平时的饮食习惯等)预测某种疾病发生的概率。由于针对具体操作相关文档太多,所以本文内容涉及具体操作较少,主要是讲方法。1.简单线性回归

2020-07-14 16:21:22 5959

原创 链家网沈阳二手房数据分析——从数据爬取到数据分析

数据爬取主要是通过使用requests实现的,鉴于爬取数据的流程简单以及电脑的性能所限,没有使用scrapy框架,而是使用where循环手动控制页码的形式,每次爬取5页信息,并将信息写入.csv文件中。得到数据后,首先看一下数据的描述性变量,通过print(data_read.describe())得到如下结果:观察网页,发现实际上当前区域只有1542套房源,可以得知数据里面包含了重复数据。这是由于在爬取信息时采用了手动改变页面的形式,每次爬取后在写入csv文件时,都会写入一个表头,所以造成了表头重复

2020-07-02 19:03:28 3386 1

原创 Python-pandas计算Excel每个工作簿的工作表中值的总和与平均值,连同原信息一起写入多个sheet

文件路径如下:ExcelPython.py是当前运行文件,红框内三个文件是原始数据文件,每个文件内有三个sheet,含日期类型。如下:我们要计算每个工作簿的工作表中值的总和与平均值,写入原文件(这里先复制出一份和原来一样的文件后写入新文件)知识点如下:pandas的函数、读取多个工作簿下的多个工作表、同时向一个Excel文件内写入多个sheet,一次写入多个Excel文件源码如下:含主要部分注释:#计算每个工作簿的工作表中值的总和与平均值,写入原文件(这里先复制出一份和原来一样的文件后写入新文件

2020-06-23 16:58:36 5092

原创 Python使用pandas对CSV进行操作(11种基础操作含源码)

源数据如下:含脏数据(price列)下列源码用到如下四个包:import pandas as pdimport globimport osimport csv目录1.基础文件读写(等同于copy文件)2.行中的值满足某个条件(含整理原始文件脏数据)3.行中的值满足某个集合4.行中的值匹配于某个模式5.选取特定的列(列索引值)6.选取特定的列(列标题)7.选取连续的行(丢弃不需要的行)8.添加标题行9.读取多个csv文件,包含去重10.计算每个文件中值的总和与平均值,写入新文件11.计算每个文件

2020-06-21 14:02:35 14905

原创 Python使用matplotlib展示中文条形图以及条形子图(包含简单本地数据整理)

爬了点二手房数据存储在了本地csv里,爬虫部分没什么难度,这次做一个简单的数据整理和利用matplotlib展示的案例。首先这是我们爬取到的数据:里面分别为楼盘名称、经纬度(这个是通过百度地图地理编码转的)、几室几厅、面积、总价格以及在二手房网站的关注度。我们用这个数据主要用来做两个事,分别是获取关注度TOP5的房产资源以及TOP5的小区名称。首先我们来分析下获取关注度TOP5的房产资源。在这里我们先对房产资源进行一个拼接,包括小区名称+几室几厅+面积,之后我们再按照关注度进行一个从大到小的逆排序

2020-06-18 16:57:52 1601

原创 Python使用requests爬取12306指定日期列车信息

本案例基于机械工业出版社出版的《Python网络爬虫从入门到精通》相关案例改写。使用Python版本为3.7,requests版本为2.23.0目标:抓取指定日期指定出发到达目的地的指定车次信息,如下:我们目标为抓取2020-06-21日沈阳到鞍山的G8070次列车信息。整个流程如下:首先在12306网站中我们进入图示页面,打开开发者控制台,我们发现了如下交互:查看query,可以看见网站使用get请求的URL,需要我们动态传入的有train_date(日期)、from_station(起始

2020-06-16 22:35:05 1749

原创 iOS仿keep5.3.0版本健身等级界面实现自定义UITableViewCell显示进度效果

我们继续上面那篇来,在实现了头部图片下拉纵向拉伸效果后,紧接着就是这个页面的核心,当前进度占总进度的比例效果显示。按照我的需求就是下面这个图的样子。左侧进度和右侧进度说明整体被封装在一个自定义的TableViewCell里,如下图所示。为了方便控制,我在写的时候把这个自定义cell分为了左右两部分,即左面白色背景部分和右面灰色背景部分。右面灰色背景部分就是普通的空间堆叠,这里不具体阐述,接下来我们讲

2017-12-21 15:57:14 1080

原创 iOS仿keep5.3.0版本健身等级界面实现UITableView头部图片下拉纵向拉伸效果

上次写完那个记录自己最高记录的界面后,掐指一算,和教练上课也快一年了,期间还续了一次课,双十一禁不住不到一百七一节课的诱惑,又续了8节课。。。。于是问题来了,我和教练上课满一周年的话,总得写点啥来记录下时间吧,于是又翻开keep,感觉健身等级这个界面挺适合,妥了,就仿这个写一个吧! 如图,最终版是这样的,不过我们在这里需要拓展一下关于image的瓦片属性设置,毕竟这才是这种效果的核心所在。上

2017-12-15 15:26:42 1294

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除