自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RecyclerView源码分析

RecyclerView源码分析1.宏观认识2.绘制的源码解析2.1.OnMeasure :与布局流程相互结合在一起的自动测绘过程可以分为两部分:2.2.OnLayout()onLayout总结2.3.OnDraw()3.缓存机制优点4.缓存策略1.宏观认识RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,支持RecyclerView高效运行有六个类.属性名称功能描述Adapter为每一项Item创建视图ViewHolder承载Item视图的子布局

2021-07-27 11:22:22 776

原创 基础界面布局

基础界面布局1.Android布局的概念图图 1-1 Android布局管理器的类图图 1-2 Android布局的xml关系图由上述两张图结合可知,android布局类在代码层面是ViewGroup的子类,布局也是布局管理器,因为布局里面还可以添加布局;布局管理器里面既可以添加多个布局管理器又可以添加多个控件,而控件里面不能在添加布局或控件了。2.布局的通用属性属性名称 功能描述android:id 设置布局的标识android:layout_width 设置布局的宽度(dp)andro

2021-07-27 10:48:03 238

原创 otto使用和源码解析

基本同EventBus参考文件使用的区别1.otto的Bus类相当与EventBus中的EventBus类,它封装了otto的主要功能,但它不是个单例,每次都要用new创建出来,这样显然不是很方便,因此我们用单例模式将它封装起来(DCL)2. 使用@Produce来发布事件Produce注解用来生产发布事件,需要注意的是它生产事件前它需要注册,并且在生产完事件后需要取消注册。如果使用这种方法则在跳转到发布者所在的类中则会立即产生事件并触发订阅者public class SecondActivit

2021-07-22 15:30:15 498

原创 事件总线的使用

作用:解决了应用程序内各个组件或者组件和后台服务之间的通信问题基础用法源码分析构造方法:使用了(dcl)确保单例,构造函数中调用了另一种构造方法,使用建造者模式–通过EventBusBuilder 来完成对EventBus的配置和构造。构造方法的流程...

2021-07-22 11:33:03 317

原创 kotlin在Realm中的使用

1.android中实体类的创建构造函数,必须给属性分配默认值。如果需要注释,则直接加在前面 open class MusicModel (var musicID:String?=null,var name:String?=null,var poster:String?=null, var path:String?=null,var author:String?=null):RealmObject() open class UserModel(@Primar

2021-07-19 12:30:35 481

原创 定义内部接口并在类内设置一个实现属性

class MediaPlayerHelp private constructor(context: Context) { private var onMediaPlayerHelpListener: OnMediaPlayerHelpListener? = null//实现字段 // 定义接口 interface OnMediaPlayerHelpListener { fun onPrepared(mp: MediaPlayer?) f

2021-07-19 12:29:39 111

原创 如何实现一个实现了接口的字段

ServiceConnection是接口,object:是一个实现了接口的匿名类 var connection=object :ServiceConnection{ override fun onServiceConnected(name: ComponentName?, service: IBinder?) { /*先是进行赋值,再就是直接播放音乐*/ mMusicBinder = service as MusicService.Music

2021-07-19 12:28:45 115

原创 kotlin lambda表达式测试

一个回调class TestCallbackA { var mCallBack: ((str: String) -> Unit)? = null//((str: String) -> Unit)用括号括起来说明这是一个字段,可能为null fun setCallback(myCallBack: ((str: String) -> Unit)) { this.mCallBack = myCallBack }}private fun testA()

2021-07-19 12:28:04 292

原创 kotlin的单例

使用kotlin来写传参的线性安全的懒汉单例class MediaPlayerHelp private constructor(context: Context){ val mContext=context init { val mMediaPlayer= MediaPlayer() } //构造器执行的构造函数 companion object{ @Volatile private var instance:MediaPlayerHelp?

2021-07-19 11:32:11 261

原创 常用设计模式

常用设计模式六大原则--核心是降低类间的耦合创建型设计模式单例模式java版kotlin版工厂模式建造者模式结构性设计模式代理模式装饰模式外观模式享元模式行为型设计模式策略模式模板方法模式观察者模式六大原则–核心是降低类间的耦合单一职责原则一个类只负责一个变化开放封闭原则开发是指扩展是开发的,修改是封闭。里氏代换原则使用的基类的地方可以都可以被其子类,完美的替换基类。要求:子类的方法都必须在父类中进行声明。( 用子类来代替父类,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父

2021-07-19 11:28:15 78

原创 Android10.0通知Notification的使用

参考文献

2021-07-14 16:08:31 353

原创 Android Resources之assets

assets的基本知识注:针对assets的文件,只能通过context.asset来进行数据流的处理,不能用File类来进行加载

2021-07-13 15:01:30 187

原创 Assignments are not expressions,and only expressions are allowed in this context

kotlin中不提倡将=当作表达式错误代码StringBuilder body = new StringBuilder();String nextLine;while ((nextLine = bufferReader.readLine()) != null) { body.append(nextLine); body.append('\n');}修改后的正确代码将判断和赋值语句分开StringBuilder body = new StringBuilder();String ne

2021-07-13 14:42:59 361

原创 kotlin lambda与匿名内部类的使用

常规的方式实现匿名内部类valueAnimator.addUpdateListener(object :AnimatorUpdateListener { override fun onAnimationUpdate(animation: ValueAnimator?) { currentPoint = animation?.animatedValue as Point postInvalidate() }})使用lambda后valueAnimato

2021-07-07 15:32:42 242

原创 分组列表悬浮顶部栏(吸顶效果)

分组列表(吸顶效果)

2021-07-06 14:41:01 237

原创 RecyclerView的分割线原理

itemDecoration的具体使用

2021-07-06 10:37:23 100

原创 使用Kotlin扩展函数 + ViewBinding来完成自定义组件的功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档使用Kotlin扩展函数 + ViewBinding来完成自定义组件的功能一、写控件布局,并用Include放入界面二、扩展控件Binding类的函数,完成必要的业务操作一、写控件布局,并用Include放入界面 标题控件布局<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com

2021-06-29 11:07:49 497

原创 使用ViewBinding时遇到 java.lang.ClassCastException: android.widget.RelativeLayout cannot be

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档使用ViewBinding时遇到 java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to cast to android.widget.TextView<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.a

2021-06-29 10:58:17 842

原创 unable to find valid certification path to requested target 报错的解决方法

AndroidStudio Cause: unable to find valid certification path to requested target 报错的解决方法项目场景:问题描述:原因分析:解决方案:项目场景:在使用AS4.2.1版本时,新建一个例子工程,出现了以上错误问题描述:在我们使用Gradle搭建安卓项目骨架时,经常会遇到appcompat-v7找不到依赖的情况或者是需要可靠的认证路径,其报的异常故障码如下:unable to find valid certificat

2021-06-11 16:03:06 1983 2

原创 安卓中Canvas,paint的Api详解

安卓中Canvas,paint的Api详解概述两种坐标系Canvas保存和还原paint的常用设置设置颜色设置不透明度设置是否抗锯齿设置文本缩放倍数设置字体大小设置下划线设置实心还是空心设置画笔的粗细画图画文字概述我们通过在画布上绘画进行类比,如下:Canvas:相当于画布,Bitmap提供内存,绘的画会保存在Bitmap中。Paint:相当于画笔。有了画笔和画笔我们就可以绘画了。两种坐标系Canvas绘图中牵扯到两种坐标系:Canvas坐标系与绘图坐标系。Canvas坐标系Canva

2020-11-09 13:12:53 183

原创 在android中资源文件的存放和读取

在android中资源文件的存放和读取在main文件下创建一个asset文件夹,将所需的文件存放其中。利用Context.getAssets()来获取一个AssetManager对象,该对象会与asset文件夹相关联,通过open(filePath),可以获取对应路径的文件的inputStream.源码展示context.getAssets()/** * Returns an AssetManager instance for the application's package. 返回应用

2020-10-30 10:53:50 401

原创 使用Glide加载网络的图片和glide-transformations来虚拟化图片

使用Glide加载网络的图片和glideTranformtions来虚拟化图片使用Glide加载网络的图片导入包简单案例将图片圆圈化glide-transformations来虚拟化图片使用Glide加载网络的图片GutHub地址:官网地址导入包在程序的gradle下repositories { google() jcenter()}在app模块的gradle下dependencies { implementation 'com.github.bumptech.glide:gli

2020-10-29 16:00:41 294

原创 Realm for Android 使用入门

Realm for Android 使用入门一、使用要求二. 环境配置几个基本概念1.数据模型2. 事务3. 引用计数4. 数据库的迁移初始化Realm并配置Realm1.初始化Realm,获得Realm对象初始化获得使用默认配置的Realm对象2. Realm使用完了之后要关闭创建模型字段类型修饰符Realm 是一个手机数据库,是用来替代 SQlite 的解决方案,比 SQlite 更轻量级,速度更快,因为它有一套自己的数据库搜索引擎,并且还具有很多现代数据库的优点,支持 JSON,流式 API 调用

2020-10-21 21:18:40 1847

原创 常见的音乐播放方式

常见的音乐播放方式Activity全局单例类来与applicationservice后台Activity1.直接在Activity中去创建播放音乐,音乐与Activity绑定,Activity运行时播放音乐,Activity退出时音乐就会停止播放。全局单例类来与application2.利用全局单例类来与application进行绑定,application运行时播放音乐,application被杀死时音乐就会停止播放。(当前使用)service后台3.使用service后台程序进行音乐播放,该

2020-10-21 15:29:24 422

原创 SharePreference的应用---完成自动登录功能

完成自动登录功能一级目录二级目录三级目录一级目录二级目录三级目录

2020-10-18 20:40:47 318

原创 将一个MediaPlayer控件分装

将一个MediaPlayer控件分装思路单例模式将原有的接口对外开放。思路1.只有一个对象,要使用单例模式2.要考虑在多种条件下使用MediaPlayer的功能3.通过构建内部接口,将原有的接口对外开放。所有对MediaPlayer的操作都要通过封装好后的函数进行调用单例模式MediaPlayerHelp.javaprivate static MediaPlayerHelp instance;//nullpublic static MediaPlayerHelp getInstance(

2020-10-14 23:46:22 129

原创 一个音乐播放器的ui布局

一个音乐播放器的ui布局实现效果如下背景的布局自定义具有动画效果控件(将指针和圆圈合成一个控件)自定义控件添加动画指定动画文件启动动画音乐播放器的加载与使用实现效果如下播放时的图暂停时的效果图背景的布局利用Glide-transformation来实现背景图片的模糊化这个播放界面的活动为MusicPlayActivity这里时使用了FrameLayout来布局。<?xml version="1.0" encoding="utf-8"?><FrameLayout xmln

2020-10-12 23:17:09 1305 1

原创 定义RecyclerView的线性布局高度--在RecyclerView内部滚动功能禁用时

定义RecyclerView的线性布局高度思路代码实现思路1.假如已知列表高度,可以直接在布局中把RecyclerView的高度定义上2.不知道列表高度情况下,需要手动计算RecyclerView的高度。(绝大多数情况)代码实现主要代码是在适配器中完成, 因为ItemView 只有在适配器中出现。获取布局参数 要将其转换成上一层布局的类型RecyclerView获取的布局参数转成上一层的LinearLayout.itemView 获取到的参数布局 要转换成 RecyclerView 的参数

2020-10-11 16:12:30 181

原创 实现宽高相同的ImageView

实现宽高相同的ImageView在ImageView类中,是通过OnMeasure()方法来测量宽高的。@Overrideprotected void onMeasure(int widthMeasureSpec, int widthMeasureSpec) { super.onMeasure(widthMeasureSpec, widthMeasureSpec);}形参 widthMeasureSpec, widthMeasureSpec中存储着宽和高的数据。//获取View宽度 i

2020-10-10 20:53:11 272

原创 Intent标识符

Intent标识符删除老栈,开启新栈在启动新的Activity时,通过在传递给startActivity()的intent 中添加相应的标识符,可以修改Activity与其任务的默认关联方式。删除老栈,开启新栈Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK Intent intent = new Intent(context, LoginActivity.class);// 添加intent标识符,清理act

2020-10-09 15:51:19 119

原创 安卓三种动画之一View Animation与 案例 为活动的载入与退出添加动画

安卓三种动画之一View Animation与 案例 为活动的载入与退出添加动画View Animation(视图动画)View动画的概述及种类在活动中加载这个动画View动画的属性详解View Animation(视图动画)View动画的概述及种类视图动画的作用对象是View,支持四种动画效果,分别是平移动画,缩放动画,旋转动画,透明度动画。譬如,我们可以对TextView设置其文本的移动,旋转,缩放,透明。视图动画可以通过XML或通过代码动态创建,对于视图动画建议使用XML文件定义,因为它具有更

2020-10-09 13:57:54 226

原创 简单样式 --全局使用(分割线,按钮)

简单样式 --全局使用典型例子:分割线的使用–本质是一个宽度或者高度极小的view在style.xml 中在定义中style,写出一些属性要求。<!-- 分割线--> <style name="line"> <item name="android:layout_height">1dp</item> <item name="android:layout_width">match_parent<

2020-10-08 13:43:54 190

原创 具有自定义属性的自定义控件

具有自定义属性的自定义控件自定义的属性新建一个布局文件新建一个类在其他布局文件中使用该控件完整的inputView代码自定义的属性在values文件夹下新建一个attrs.xml文件,在其中定义一个新的样式,在样式下的子标签中放入一些自己所需的属性。format表示能接受哪些内容, reference是指资源文件<?xml version="1.0" encoding="utf-8"?><!--自定义的属性--><resources><!-- 声

2020-10-08 13:25:51 200

原创 通用UI的实现-同一个NavBar在不同活动的不同显示

1.写一个单独的布局文件,并在主要的活动布局中引入改ui布局文件<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/navBarHeight" androi

2020-10-07 17:11:32 180

原创 安卓自定义计时器控件的不同方法

安卓自定义计时器控件方法一Timer与TimerTask(Java实现)schedule(TimerTask task, long delay) // 延迟delay毫秒后,执行一次task。schedule(TimerTask task, long delay, long period) // 延迟delay毫秒后,执行第一次task,然后每隔period毫秒执行一次task。mTimer.schedule(new TimerTask() { @Override public v

2020-10-07 12:48:56 317

原创 ColorPrimaryDark 与statusBarColor

ColorPrimaryDark 与statusBarColor相同点:1.都是修改statusBar的颜色2.Adroid 5.0 以上才能支持不同点:1.statusBarColor具有更高级别,优先使用statusBar的颜色2.statusBarColor 在Android 5.0以下使用会出现警告提示3.默认情况下,statusBarColor 的值继承自colorPrimaryDark处理方式;新建一个 value-v21 文件夹,将写有statusbarColor的styl

2020-10-06 17:06:05 422

原创 android基本控件——RadioGroup和CheckBox

android基本控件——RadioGroup和CheckBox区别和相似控件的属性RadioGroupRadiobutton区别和相似RadioGroupCheckBox选中后,通过点击无法变为未选中选中后,通过点击可以变为未选中在一组中,只能同时选中一个在一组中,只能同时选中多个大部分UI框架中,默认圆形表示大部分UI框架中,默认框型表示控件的属性RadioGroup(1)orientation:排列方式  若值为horizontal,则为横向,水平

2020-10-03 10:43:31 1137

翻译 android.content.res.Resources$NotFoundException: String resource ID #0xd

android.content.res.Resources$NotFoundException: String resource ID #0xd运行出现上述异常。holder.tvAge.setText(bean.getAge());其中tvAge是TextView类型,bean.getAge()是int类型。setText设置的是String类型。由于类型不一致,所以出现了上述异常。需要把int类型转为String类型。修改后的正确代码holder.tvAge.setText(String.v

2020-09-29 17:37:58 261

原创 Android Studio控制台或者界面显示中文乱码

Android Studio控制台或者界面显示中文乱码如何修改#错误界面的显示效果如何修改设置字体为YaHei即可

2020-09-28 10:06:32 262

原创 contenProvider模块知识

contenProvider模块知识大纲二级目录三级目录大纲二级目录三级目录项目Value电脑$1600手机$12导管$1Column 1Column 2centered 文本居中right-aligned 文本居右

2020-09-27 15:55:31 202

空空如也

空空如也

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

TA关注的人

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