
Android开发
wjxbless
如果觉得简单,那就多思考
展开
-
获取Bitmap中主色调的取色器
颜色空间RGB色彩空间RGB颜色空间以R(红)、G(绿)、B(蓝)三种基本色为基础,进行不同程度的叠加,呈现不同的颜色–>三原色模式RGB颜色空间 可以使用一个立方体来表示颜色,黑、蓝、绿、青、红、紫、黄、白8种常见颜色分别位居立方体的8个顶点,通常将黑色置于三维直角坐标系的原点,绿蓝红分别分别置于xyz轴上,个参数的取值范围是:R : 0 - 255, G : 0 - 255, B : 0 - 255其中(0,0,0) ->(255,255,255)的提对角线表示从黑色到白色的灰度值原创 2020-12-19 22:57:18 · 1317 阅读 · 2 评论 -
View.post() 分析
view.post() 使用目的获取View的属性子线程处理耗时任务,并抛到主线程执行view.post()分析首先在onCreate()方法中使用post()方法override fun onCreate(savedInstanceState: Bundle?) { Log.d(TAG, "onCreate") super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)原创 2020-11-01 21:32:56 · 727 阅读 · 0 评论 -
Android 使用Navigation 跳转页面时发生crash
crash问题日志Fatal Exception: java.lang.IllegalArgumentExceptionnavigation destination com.xxx.yyy:id/action_aFragment_to_bFragment is unknown to this NavController解决// 在执行跳转语句之前使用下面方法对当前fragment 进行判断if (Navigation.findNavController(it).currentDestination原创 2020-10-25 23:05:15 · 1419 阅读 · 0 评论 -
View 生命周期分析
View 生命周期View生命周期函数意义onFinishInflateView中所有的子元素均被映射成xml时触发onAttachedToWindow该方法在当前View被附到一个Window上时被调用onMeasureView确定所有子元素的大小onSizeChanged当View大小发生变化时触发onLayout当View分配所有子元素的位置和大小时触发onDrawView渲染内容细节onWindowFocusChanged当窗口原创 2020-08-02 22:55:41 · 426 阅读 · 0 评论 -
移动端软件架构设计
什么是架构软件架构是一张开发蓝图,是一个整体的规划,即软件工程的指导方针,软件开发的主要目标如图所示:优秀的软件架构提供迅速响应,扩展灵活;还要具备美观性,代码要简洁,易于阅读、维护、能使维护者对功能产生更清晰的认识,能够快速地处理变化软件架构设计的关注点软件架构设计应该关注 – 变化软件架构设计的本质和目的本质降低软件熵目的:降低因需求增加导致的软件熵增加从而导致的成本增加架构设计模式原则架构的细节需要运用一些经典的设计模式原则,比较常用的原则之一为SOLID原则原创 2020-05-18 19:11:35 · 2011 阅读 · 0 评论 -
ViewModelScope 简介与使用
简介当在ViewModel中引入协程,如果直接使用CoroutineScope,那么需要在onCleared()方法中取消协程,如果忘记取消协程那么会导致出现内存泄漏等各种问题,此时需要使用ViewModel扩展属性viewModelScope来实现协程作用域。viewModelScope源码分析val ViewModel.viewModelScope: CoroutineScope&...原创 2020-04-26 20:04:35 · 10128 阅读 · 0 评论 -
Jetpack -- Room使用简介
简介Room是对 Android中SqlLite数据库的一个抽象,实现了流畅的访问SqlLite数据库基本使用创建Entity实体类@Entitypublic class Word { // 声明主键 @PrimaryKey(autoGenerate = true) &nb...原创 2020-03-26 14:57:38 · 363 阅读 · 0 评论 -
Jetpack -- LifeCycles
简介android.arch.lifecycle提供的类和接口可以感知activity和fragment的生命周期,可以使得组件自己在activty和fragment的生命周期中的某个状态完成一些操作这样每个组件都可以实现良好的封装,提高了可移植性使用自定义一个Chronometer,实现在activity的onPause时停止计数,onResume时开始接着计数class M...原创 2020-03-25 17:50:48 · 429 阅读 · 0 评论 -
Jetpack -- ViewModel状态保存
简介一个Activity对应一个ViewModel,当Activity进入后台,屏幕翻转,语言切换等Activity会重建但是ViewModel还存活着,所以数据并不会丢失,当进程被系统杀死,Activity被回收,那么ViewModel中的数据就会丢失,这时候就需要ViewModelStore使用class MyViewModel(handle: SavedStateHan...原创 2020-03-25 13:57:01 · 627 阅读 · 2 评论 -
Jetpack -- ViewModel使用与分析
简介使用Android AAC组件构建自己的应用之后,为了不让自己停留在仅仅是使用的层面,所以从头开始总结一边AAC组件的使用以及注意的要点ViewModel旨在以注重生命周期的方式存储和管理界面相关的数据, ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在作用:将View中的数据模块进行单独的管理,使得Activity和Fragment更加简单,只需要专注于界面本身...原创 2020-03-23 19:12:07 · 371 阅读 · 0 评论 -
Android lottie java.lang.IllegalStateException: Missing values for keyframe.
问题一在Adobe After Effects和bodymovin插件,重新导出json后,正常显示。Settings > Advanced > Export Old Json Format问题二java.lang.IllegalStateException: You must set an images folder before loading an image. Se...原创 2020-02-18 13:04:10 · 2802 阅读 · 1 评论 -
启动页在启动时,状态栏闪现
启动页的状态栏闪现定义一个style<style name="App.Theme.Launch" parent="AppTheme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowTranslucentStatus">...原创 2020-02-18 12:56:13 · 715 阅读 · 0 评论 -
Activity内嵌Fragment,当Activity recreate时Fragment出现重叠
recreate()Activity recreate()之后会出现fragment重叠的问题,需要给fragment增加tag@Overrideprotected void onCreate(Bundle savedInstanceState) { // 判断当前是recreate还是新启动 i...原创 2020-02-18 12:53:52 · 604 阅读 · 0 评论 -
Android跟随状态栏颜色设置状态栏字体颜色
Window window = activity.getWindow();// color就是你设置的状态栏颜色,或者说是TitleBar的背景色,但注意这是一个int值,不是resourceId// ColorUtils.calculateLuminance(color) >= 0.5的作用只是确定这个颜色是亮色还是暗色if (ColorUtils.calculateLuminanc...原创 2020-02-18 12:25:00 · 734 阅读 · 0 评论 -
Android TextView设置跑马灯效果不生效-解决
TextView跑马灯效果不生效解决方案一<TextView android:id="@+id/music_name_tv" android:layout_width="match_parent" android:layout_height="wrap_content" ...原创 2020-02-18 12:21:52 · 1249 阅读 · 0 评论 -
根据WanAndroid开放Api打造自己的WanAndroid App
WanAndroidMvp根据鸿神提供的WanAndroid开放Api来制作的WanAndroidApp, 基本实现了所有的功能,使用Java语言开发,基于Material Design+AndroidX + MVP + RxJava + Retrofit等优秀的开源框架,这个项目是自己实习后第一次有搭建架构的思路,实现的一个尽可能体验较佳的App,不足之处请大家多多指教参考项目UIheg...原创 2020-01-26 22:43:42 · 3450 阅读 · 2 评论 -
Android 沉浸式状态栏(状态栏浮于应用之上)和导航键冲突
问题设置状态栏透明之后(状态栏浮于应用之上体验较好),导航栏会对底部Tab进行遮挡,原因在于fitSystemWindow属性:当设置状态栏透明时if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getActivity().getWindow().addFlags( WindowMa...原创 2020-01-08 22:33:48 · 544 阅读 · 0 评论 -
TextView设置文本自动调整大小
实现方案基础TypedValue.applyDimension()方法的功能就是把非标准尺寸转换成标准尺寸, 如: dp->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics());in->px: TypedValue...原创 2019-12-01 19:54:31 · 796 阅读 · 0 评论 -
RecyclerView进阶(一)
简介最近打算复习一下RecyclerView的使用,所以先从最基础的部分开始RecyclerView相当于一个增强版的ListView,不仅实现了ListView同样的效果还优化了ListView的不足之处,既可以做到纵向滚动也可以实现横向滚动RecyclerView四大组成部分Adapter: 将数据和View进行绑定LayoutManager: RecyclerView的布局管...原创 2019-11-10 12:27:49 · 258 阅读 · 0 评论 -
ANR产生原因以及分析工具
ANR产生原因:只有当应用程序的UI线程响应超时才会引起ANR,超时原因:当前事件没有机会得到处理当前的事件正在处理,但是由于耗时太长没能及时完成引发ANR的原因;View的按键事件或者触摸事件在5s内无法得到响应BroadcastReceiver的onReceive()函数在10s内没有得到处理Service各个生米周期函数在20s内没有得到处理典型的ANR场景分...原创 2019-07-05 11:30:54 · 853 阅读 · 0 评论 -
ListView使用总结(一)
ListView接口函数函数名作用getChildCount()返回屏幕上显示的Item的个数getCount()实际上是Adapter.getCount()返回总的item的个数可见不可见都算在内getChildAt(int index)index从item中显示出来的第一项的下标(下标是指在item中的下标)开始计算getFirstVisibleP...原创 2019-08-04 15:17:17 · 290 阅读 · 0 评论 -
Android Shortcuts使用
参考文章什么是ShortCutsApp ShortCuts是在图标位置长按app图标出现的快捷方式,通过这一功能可以将对某些应用中的功能进行快速使用,同时也可以拖拽到桌面成为桌面的快捷方式。每个快捷方式都可以携带一个或者多个intent,当用户点击快捷方式时,每个intent都会触发对应的操作ShortCuts的具体使用静态的快捷方式: 其直接会打包到 apk 或 apk bundl...原创 2019-08-04 23:02:00 · 376 阅读 · 1 评论 -
Android系统内置Action
Android 系统内置ActionAction意义ACTION_ALL_APPS列出所有已安装程序ACTION_ANSWER处理来电ACTION_BUG_REPORT报告BUGACTION_CALL打开拨号程序,使用Intent提供的电话号码进行打电话ACTION_CALL_BUTTON调用拨号程序ACTION_DELETE删除In...原创 2019-08-24 13:54:50 · 359 阅读 · 0 评论 -
Android事件分发
问题引入onTouch()和onClick()事件哪一个先执行onTouch()事件里面做的事情比onClick()里面要做的事情多一些,当在同一个按钮的onTouch()和onClick()中分别打印log的时候,发现onTouch()要先与onClick()执行,所以事件的传递顺序是先经过onTouch(),再传递给onClick()原因分析:首先只要触摸了任何一个控件,就一...原创 2019-08-11 22:14:48 · 157 阅读 · 0 评论 -
ListView使用总结(二)
addHeaderView()ListView.addHeaderView(view)可以在ListView顶部添加其他的组件并连在一起形成新的组件,并且addHeaderView()会按照添加顺序将header从上至下进行罗列textView = new TextView(this);textView.setText("WJX");String[] arrs = { &n...原创 2019-08-17 14:32:52 · 184 阅读 · 0 评论 -
ViewStub--Android懒加载
定义ViewStub时一个不可见的View,通过延迟加载的方式优化布局提升渲染性能,满足了我们应用在特定的条件下,ViewStub的布局才需要被加载的情况初次加载布局的时候也会占据内存,但是他所占的内存十分小(仅仅作为占位符使用)意义:在某些时候我们需要根据情况动态的加载某些布局,但是又不想耗费资源的时候,ViewStub就会派上用场ViewStub使用主布局文件<?xm...原创 2019-09-07 23:20:01 · 191 阅读 · 0 评论 -
ActionBar的基本属性
ActionBar Displayoptionsdisplayoptions这个属性主要是控制ActionBar上面的返回按钮以及标题的显示使用 <style name="ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="...原创 2019-09-08 14:38:31 · 353 阅读 · 0 评论 -
PopupWindow 和 PopupMenu使用
PopupWindowPopupWindow相对于其他的对话框来说,他的位置可以是随意的,而且是非堵塞线程,可以显示任意的自定义Viedw,悬浮于当前Activity的顶部PopupWindow 方法方法意义setContentView(View v)设置PopupWindow显示的ViewgetContentView()获取PopupWIndow显示的vi...原创 2019-09-14 22:57:06 · 701 阅读 · 0 评论 -
沉浸式体验
问题在实际开发过程中,弹出对话框之前是沉浸式布局,但是弹出对话框之后,持有对话框的Activity显示了状态栏,用户体验很差,所以总结一下沉浸式体验沉浸式Android 沉浸式体验本质就是全屏化,整个屏幕显示都是服务内容,没有状态栏和导航栏,用户不会被系统元素打扰期望效果 应用程序的界面占据整个屏幕,用户通过手势来与系统控件进行交互SYSTEM_UI_FLAGFLAG...原创 2019-09-14 23:51:34 · 614 阅读 · 0 评论 -
崩溃优化(一)
Android 两种崩溃Java崩溃在Java代码中出现了未捕获的异常,导致程序异常退出Native崩溃在Native代码中访问非法地址或地址对齐出现问题或者程序主动 abort 异常退出 (默认的程序结束函数,这种方式可能会或可能不会以刷新与关闭打开的文件或删除临时文件)Native崩溃捕获机制以及实现首先native crash因为具有上下文不全,出错信息模糊,难...原创 2019-10-06 11:05:06 · 274 阅读 · 0 评论 -
崩溃优化(二)
崩溃信息崩溃信息进程名,线程名:确认崩溃的进程是前台进程还是后台进程,崩溃是不是发生在UI线程崩溃的堆栈类型:Java崩溃,Native崩溃,ANR,要注意崩溃发生在自己的代码还是系统的代码中系统信息Logcat: 包括应用、系统运行日志,机型、系统、厂商、CPU、ABI、Linux版本等,会采集多达十几个维度的信息设备状态:是否 root、是否是模拟器。一些问题是由 X...原创 2019-10-06 12:29:27 · 222 阅读 · 0 评论