- 博客(88)
- 收藏
- 关注
转载 代码中给View设置圆角弧度的一种方式
最近项目中需要使用到圆角来展示内容。原先用得多的是用Canvas.clipXXX()或者是使用Paint.setXfermode(),现在用一个简单的方式就可实现,就是SDK21开始引入的ViewOutlineProvider类,用法也很简单。
2023-04-21 14:36:00
703
转载 Android 自定义View实现环形带刻度颜色渐变的进度条
Android 自定义View实现环形带刻度颜色渐变的进度条 - 简书 (jianshu.com)
2023-02-08 16:32:25
341
原创 移动端-流式布局
一、视口 viewport视口就是浏览器显示页面内容的屏幕区域。视口可分为布局视口、视觉视口和理想视口。二、布局视口layout viewport一般移动设备的浏览器都默认设置了一个布局视口。IOS、Android基本都将这个视口分辨率设置为980px,所以PC上的网页大多都能在手机上呈现,不是看上去元素很小,一般默认可以通过手动缩放网页。三、视觉视口 visual viewport它是用户正在看到的网站的区域。我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度
2021-11-21 18:59:23
448
原创 CSS3动画和3D转换
一、动画1、0%是动画的开始,100%是动画的完成,这样的规则就是动画序列。或者用关键词"from"和"to",等同于0%和100%。2、里面的百分比要是整数。3、里面的百分比就是总的时间的划分。4、在@keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <m
2021-11-18 16:11:21
439
原创 CSS3-2D转换
一、translate移动1、语法:transform:translate(x,y)transform:translateX(n)transform:translateY(n)2、重点:1)translate最大的优点是不会影响到其他元素的位置2)translate中的百分比单位是相对于自身元素的translate(50%,50%)3)对行内标签没有效果二、rotate旋转1、语法:transform:rotate(度数)2、重点:1)rotate里面
2021-11-15 16:23:36
538
原创 CSS3选择器
类选择器、属性选择器、伪类选择器权重都是10一、属性选择器选择符 简介 E[att] 选择具有att属性的E元素 E[att="val"] 选择具有att属性且属性值等于val的E元素 E[att^="val"] 匹配具有att属性、且值以val开头的E元素 E[att$="val"] 匹配具有att属性、且值以val结尾的E元素 E[att*="val"] 匹配具有att属性、且值中含有val的E元素 <!DOCTYPE html
2021-10-28 17:35:29
683
原创 Android中AIDL的使用
AIDL,即Android Interface Definition Language,Android接口定义语言。这门语言是为了实现进程间通信。每一个进程都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行自己的操作,每个进程之间你不知我,我不知你,而AIDL,就是两个进程之间沟通的桥梁。aidl文件支持的数据类型包括:八种基本数据类型:byte、char、short、int、long、float、double、boolean String、CharSequence 实现了Parce
2021-07-06 15:50:56
2049
1
原创 CSS高级技巧
一、元素的显示与隐藏1、diaplay属性来设置或检索对象是否及如何显示。display:none 隐藏对象;display:block 除了转换为块级元素之外,同时还有显示元素的意思。特点是隐藏之后,将不再保留位置。2、visibility 可见性visibility:visible 对象可视;visibility:hidden 对象隐藏。特点:隐藏之后,继续保留原有位置。3、overflow 溢出overflow:visible 不剪切内容也不添加滚动条ove
2021-06-23 15:55:01
639
原创 CSS-定位
定位:将盒子定在某一位置,自由的漂浮在其他盒子的上面。定位也是用来布局的,定位=定位模式+边偏移。在CSS中,通过top、bottom、left和right属性定义元素的边偏移。
2021-06-08 20:57:44
280
原创 CSS-浮动
一、CSS布局的三种机制1、普通流(标准流)块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em2、浮动让盒子从普通流中浮起来,主要作用让多个块级盒子一行显示。3、定位将盒子定在浏览器的某一位置。二、语法选择器{ float:属性值;}属性值 描述 none 元素不浮动 left 元素
2021-05-30 18:49:00
81
原创 CSS盒子模型
所谓盒子模型,就是把HTML页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。盒子模型由元素的内容、边框(border)、内边距(padding)、外边距(margin)组成。 盒子里面的文字和图片等元素是内容,盒子的厚度是盒子的边框,盒子内容与边框的距离是内边距,盒子与盒子之间的距离是外边距。一、盒子边框属性 作用 border-width 边框粗细,单位px border-style 边框样式 none:默认值,没有边框 solid
2021-05-23 18:03:14
95
原创 CSS基础
一、css样式表1、行内样式表。<标签名 style="属性1:属性1值;属性2:属性2值;">内容</标签名>2、内部样式表(内嵌样式表)<head><style> 选择器{ 属性1:属性值1; 属性2:属性值2; }</head>这里的选择器就是选择要设置样式的html标签。3、外部样式表(外链式)将所有的样式放在一个或多个以.css为扩展名的外部样式表文件中...
2021-04-26 14:30:03
445
原创 HTML
一、web标准主要包括结构、表现和行为三个方面。结构用于对网页元素进行整理和分类,像HTML。表现用于设置网页元素的版式、颜色、大小等外观样式,主要指的是CSS。行为是指网页模型的定义及交互的编写,像JavaScript。二、排版标签1、<h1>…<h6>标题标签。2、<p>段落标签。3、<hr/>水平线标签,单标签。4、<br/>换行标签,单标签。5、<div>、<span>没有语义,是我.
2021-04-25 19:31:34
470
原创 线程池原理与AsyncTask
一、线程池原理1、什么是线程池线程池就是将线程进行池化,需要运行任务时从池中拿一个线程来执行,执行完毕,线程还放回池中。2、为什么要用线程池?1)降低资源消耗。通过重复利用已创建的线程来降低创建和销毁线程造成的消耗。2)提高响应速度。省去了创建和销毁线程所需要的时间。3)提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。3、创建线程池时各个参数的含义1)corePoolSize:线程池中
2020-09-10 15:46:23
223
原创 Java多线程
一、基础概念1、CPU核心数和线程数多核心指的是单芯片多处理器,将多个CPU集成到同一个芯片内,不同的CPU可以单独的运行程序。目前主流的CPU有四核、六核、八核。增加核心数目的是为了增加线程数,一般情况下它们是1:1对应关系,也就是说八核CPU一般拥有四个线程。但Intel引入超线程技术后,使核心数与线程数形成1:2的关系。2、CPU时间片轮转机制我们平时在开发的时候,感觉并没有受CPU核心数的限制,想启动线程就启动线程,哪怕是在单核CPU上,是因为操作系统提供了一种CPU时间片轮转机制,
2020-09-06 18:09:50
246
原创 Java中的反射
一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的,于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用new关键字来创建对象了。这时候,我们就需要使用JDK提供的反射API进行反射调用。反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整结构,并调用对应的方法。像使用的各种框架,如Retrofit,在使用的时候,并不知道我们的调用者会创建什么样的对象,这个时候就会用到反射。一、获取Class对象的方式
2020-08-23 14:58:51
427
原创 Java中的泛型
一、泛型的好处1、多种数据类型执行相同代码的时候,可以共用一段代码。private void add(int x, int y) { //do something}private void add(double x, double y) { //do something}private <T> void add(T x, T y) { //do something}2、使用了泛型的时候不需要强制转换。
2020-08-21 14:53:41
158
原创 Java虚拟机内存结构
一、程序计数器 程序计数器是一块较小的内存空间,它的作用是:1)字节码解释器工作时通过改变计数器的值选取下一条需要执行的字节码指令(分支、循环、跳转、异常处理等都需要依赖这个计数器来完成)。2)多线程中,记录当前线程执行的位置(保证线程能恢复到正确的执行位置)。 程序计数器是线程私有的,生命周期随线程的创建而创建,随线程的结束而消亡。各条线程之间的计数器互不影响,独立存储。二、Java虚拟机栈 Java虚拟机栈也是线程私有的,它的生命周期与线程相...
2020-07-29 19:44:25
102
原创 Android虚拟机
一、DalvikDalvik是Google专门为Android操作系统开发的虚拟机,它支持.dex格式的Java应用程序的运行。APK被安装到手机中时,APK中的Dex文件被优化成odex文件,每次运行app时,虚拟机会将odex文件解释翻译成机器码,这样才算是本地可执行代码,被系统运行。Dalvik虚拟机执行的是dex字节码,负责解释dex字节码为机器码。如果不做处理,每次执行代码,都需要Dalvik将dex代码翻译成微处理器指令,然后交给系统处理,这样效率不高。为了解决这个问题,Google在2
2020-06-29 16:25:57
478
原创 JavaScript的一些基本概念
一、基本知识1、ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。虽然语句结尾的分号不是必需的,建议我们任何时候都不要省略它。加上这个分号可以避免很多错误,也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间推测应该在哪里插入分号了。2、虽然条件控制语句(如if)只在执行多条语句的情况下才要求使用代码块,但最佳实践是始终在控制语句中使用代码块,即使代码块中只有一条语句,这样可以让编码意图更加清晰,也能降低修改代码时出错的几率。 if(true){
2020-05-31 16:14:15
152
原创 Gradle配置全局变量
为了方便在不同的module中设置版本号等配置信息,我们可以通过配置全局变量来统一管理所有module的公共配置信息。配置方法有以下几种。1、创建一个gradle文件来统一管理版本号信息1)新建一个gradle文件,可以在项目的跟目录下创建(如config.gradle),也可以在具体某个目录下(如根目录下的buildsystem/config.gradle)ext { bu...
2019-12-27 14:09:50
2173
原创 Handler消息机制-ThreadLocal的使用
ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据。数据存储以后,只有在指定的线程中才能获取到数据,其他线程则无法获取到数据。所以ThreadLocal用于存储一些以线程为作用域、不同线程具有不同的数据副本的数据。一个典型的使用场景:ThreadLocal<Boolean> mThreadLocal = new ThreadLocal<>...
2019-09-27 10:51:36
243
原创 Handler消息机制
Android的消息机制主要是指Handler的运行机制,也就是Handler、Message、MessageQueue、Looper、ThreadLocal之间的工作过程。Handler:主要用于发送和处理消息。Message:在线程之间传递消息。MessageQueue:消息队列,主要用于存放所有通过Handler发送的Message,每个线程中只会有一个MessageQueue对...
2019-09-26 21:30:07
283
原创 Android自定义View-事件分发
当一个MotionEvent产生以后,系统需要把这个事件传递给一个具体的View,这个传递过程就是分发过程,事件分发的过程是由dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent这三个方法过程完成。dispatchTouchEvent:事件分发。return true:表示事件被以该节点为根节点的View树成功处理,事件不会再向上返...
2019-09-10 15:38:56
428
原创 自定义View-scrollTo(int x, int y)、ScrollBy(int x, int y)详细介绍
1、首先需要注意的是scrollto和ScrollBy方法改变的都是View内容的位置而不能改变View在布局中的位置。2、scrollBy实际上也是调用的scrollTo方法。3、scrollTo和scrollBy都是通过改变mScrollX和mScrollY这两个属性的值来滑动的,这两个属性可以通过getScrollX和getScrollY方法得到。mScrollX和mScrollY分...
2019-08-27 11:24:09
333
原创 Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.4.1问题
在Mac下的AndroidStudio上运行项目的时候报错:解决方式是:设置---Build,Execution,Deployment---Gradle---Android Studio下勾选上Enable embedded Maven repository.允许加入maven仓库,mac上默认是不勾选的。...
2019-08-23 17:26:02
1767
原创 Flutter-Image、Icon的使用
ImageFlutter中,可以通过Image来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络等。在实际应用中,用到比较多的数据源是asset和网络。一、从asset中加载图片从asset中加载图片需要三步:1、在工程根目录下创建一个images的目录,将需要展示的图片(如a.png)放在该目录下。2、在pubspec.yaml中的flutter部门...
2019-05-08 18:05:35
1712
原创 Flutter-Text详细介绍
一、TextStyle属性 说明 Color color 文本颜色 如果指定了foreground,则此值必须为null TextDecoration decoration 绘制文本装饰: TextDecoration.underline:下划线 TextDecoration.overline:上划线 TextD...
2019-05-06 21:53:02
582
原创 Android自定义View-Path的详细介绍
一、构造方法1、Path path=new Path();//空的构造方法2、Path path=new Path(Path src);//创建一个新的路径,并从src路径获取内容赋值给新的路径二、Path常用的一些方法分类 Path方法 备注 点操作 moveTo(float x,float y) 设置接下来操作的起点位置为(x,y) rMo...
2019-03-14 20:54:50
795
原创 Android硬件加速
硬件加速渲染其实就是通过GPU来进行渲染,如果一个设备支持GPU硬件加速渲染,那么当Android应用程序调用Open GL接口来绘制UI时,Android应用程序的UI就是通过硬件加速技术进行渲染的。软件绘制(单纯使用CPU)的整个绘制过程都是在主线程进行,如果同时要响应用户输入事件,有可能会造成卡顿;硬件绘制(使用GPU)对图形的绘制渲染能力更胜一筹,如果使用GPU并在不同线程绘制渲...
2019-03-11 16:18:30
187
原创 Android自定义View-Canvas的详细介绍
Canvas常用方法有:1)drawXxx系列:以一定的坐标值在当前画图区域画图,需要注意的是图层会叠加,即后面绘画的图层会覆盖前面绘画的图层。2)clipXxx系列:在当前的画图区域裁剪出一个新的画图区域,这个画图区域就是Canvas对象的当前画图区域了。比如:clipRect(new Rect()),那么该矩形区域就是Canvas的当前画图区域。3)getXxx系列:获得与Canv...
2019-03-04 17:37:38
590
原创 Android自定义View之自定义属性
在我们平时写布局文件的时候会用到很多属性,这是系统帮我们定义好的一些属性,这些属性在\sdk\platforms\android-XX\data\res\valus目录下,这是系统自带的所有属性。如下就是一些常用到的系统自带属性:因为所有的控件都是View的子类,所以View定义的属性所有的控件都能使用,但是View的子类,如TextView、ImageView定义的属性,就只能他自己使用...
2019-02-25 17:10:27
746
原创 Android命名空间xmlns的详细介绍
XML命名空间提供避免元素命名冲突的方法。打个比方,A学校有名同学叫小明,B学校也有名同学叫小明,那我们如何识别这两名拥有相同名字的同学呢?这时候命名空间就派上用场了。A和B此时就可以被当成是命名空间了。也就是说,命名空间里面存放的是特定属性的集合。Android中常见的命名空间下面分别介绍android、tools、app(自定义命名空间)这几个常见命名空间1、android...
2019-02-21 17:45:40
2688
原创 自定义View-MeasureSpec的详细介绍
View类中的onMeasure()方法是用来测量当前View的宽度和高度的,当我们给View设置了LayoutParams以后,系统会将LayoutParams在父容器的约束下转换成对应的MeasureSpec,然后再根据这个MeasureSpec来确定View测量后的宽高。有3种测量模式:MeasureSpec.UNSPECIFIED:不确定值,表示子布局想要多大就多大,很少使用Mea...
2019-02-20 21:17:10
839
原创 EditText的selectAll()方法无效
现有一个这样的需求,有一个输入数量的EditText,当输入的数量过大的时候提示“输入数量过大”,并选中文本框中的内容,本来以为很容易实现的功能,按回车的时候判断一下EditText里面的数量是否过大,过大的话调用EditText.selectAll()方法选中内容。实现方法是:mEtOne.setOnKeyListener(new View.OnKeyListener() { @O...
2018-12-28 17:00:38
3433
原创 Parcelable工作原理
一、Parcelable的作用Parcelable是Android为我们提供的序列化接口。什么是序列化呢?简单说就是将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行数据传输,反序列化就是从二进制流(序列)转换为对象的过程。为什么要序列化呢?1)永久性保存对象,保存对象的字节序列到本地文件中;2...
2018-12-05 21:34:55
1545
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人