![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android基础
文章平均质量分 60
小海编码日记
Android开发工程师,先后从事ROM定制,App架构设计,产品需求研发等工作
展开
-
Gradle编译报错:Could not create service of type ChecksumService using BuildSessionScopeServices.createCh
Gradle编译异常处理原创 2022-06-23 06:44:57 · 2571 阅读 · 2 评论 -
appComponentFactory not found in package android
这里写自定义目录标题问题原因解决方案问题原因项目中appcompat包版本冲突解决方案统一项目内support相关包版本,在项目的build.gradle目录下,添加如下内容: ext { supportlib_version = 'X.X.X' } subprojects { project.configurations.all { resolutionStrategy.eachDependency { details -原创 2020-06-06 11:32:12 · 490 阅读 · 0 评论 -
Android MediaProjection 录屏方案
MediaProjection是Android5.0后提出的一套用于录制屏幕的API,无需root权限。与MediaProjection协同的类有MediaProjectionManager,MediaCodec等。获取MediaProjection对象申请权限在使用MediaPeojection相关API时,需要请求系统级录制屏幕权限,申请权限的方法如下://通过g...原创 2020-01-25 17:45:18 · 5093 阅读 · 6 评论 -
Android Architecture Components(1)
Android Architecture Components(1)@(Android)[Components, Java]Android Architecture Components是google官方提供的一套架构组件,用于设计构建更加稳健,可测试和易维护的应用.这一部分我们主要解释如何在工程中引入Architecture Components,目前我们已经可以从Google Maven仓库获取原创 2017-12-04 17:38:56 · 300 阅读 · 0 评论 -
[Android 进阶]MediaCodec简介
[Android 进阶]MediaCodec简介由于前段时间单位处理过录屏直播之类的需求,这边首推的一个系列着力于MediaCodec,该系列包含下面几片文章:[Android 进阶]MediaCodec系列之MediaCodec简介[Android 进阶]MediaCodec系列之MediaCodec+MediaEctractor播放器[Android 进阶]MediaCodec+Media原创 2017-12-04 17:59:31 · 1267 阅读 · 0 评论 -
Android Architecture Components(2)
Android Architecture Components(2)Android Architecture Components是google官方提供的一套架构组件,用于设计构建更加稳健,可测试和易维护的应用,在Android Architecture Components中包括如下几个组件:LifeCycle:是一个用于定义Android组件生命周期的对象;LifeCycleOwner:拥有原创 2017-12-04 17:44:33 · 259 阅读 · 0 评论 -
Retrofit2初尝问题汇总及解决方案(含Dagger2)
First:No Retrofit annotation found. (parameter #2)Solution Link: No Retrofit annotation foundSecond:java.lang.IllegalArgumentException: Service methods cannot return voidSolution Method:修改Service层返回值为原创 2016-04-10 03:22:07 · 4547 阅读 · 0 评论 -
Dagger2----一个最简单的Dagger2依赖的实现
Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担,Dagger2分析所有依赖并生成代码将这些依赖组织在一起,关于更多的Dagger2理论介绍请移步详解Dagger2(中文版)Tasting Dagger 2 on Android(可能需要梯子)。本次我们主要介绍如何完成一个最简单的Dagger2依赖项目,其中包括dagger2的Gradle添加和最基本注入关系处理。原创 2016-04-13 22:31:35 · 1498 阅读 · 0 评论 -
MVP浅尝----从一个自定义View说起
在MVP模式里通常包含4个要素: (1)View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity); (2)View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试; (3)Model:负责存储、检索、操纵数据(有时也实现一个Model int原创 2016-04-14 21:15:05 · 1562 阅读 · 0 评论 -
Android回调机制之Activity与DialogFragment数据传递
Android回调机制之Activity与DialogFragment数据传递在实际编程过程中,我们经常碰到这样一种情况:在新建的Dialog或者Fragment中修改数据,但是要在Activity或其他位置进行数据更新,那怎么处理呢?此时我们的回调机制就派上了用场。那么什么是回调机制呢,回调机制是一种依赖于接口的传递机制,旨在为其他类暴漏方法以使得其他类具备获取数据权限(PS:这里的权限指的是修饰原创 2016-09-07 23:12:00 · 8440 阅读 · 7 评论 -
Android Architecture Components(3)
Android Architecture Components(3)上一篇文章中我们介绍了Architecture Components中的LifeCycle,LifeCycleOwner及LifeCycleObserver,不知道大家掌握的怎么样?在学习编码的路上,还是要多多实践才可以呢。 接下来我们要介绍的是ViewModel。Android Architecture Components3原创 2017-12-05 22:21:30 · 247 阅读 · 0 评论 -
自定义View详解(1)
好久好久没更新了,不知道大家还有没有在看以前的一些博文,这段时间换了个坑位还是有点小忙呢!鉴于最近工作接触自定义View,Canvas比较多,所以打算开个系列,详细讲讲View的那些事。View是什么要学习自定义View,我们首先应该清楚的认识到View是个什么东西。那么View究竟是什么呢? 从代码层面看,View是一个类,是所有控件的直接或间接父类,详情见图-View子孙关系...原创 2018-09-25 16:29:36 · 290 阅读 · 0 评论 -
自定义View详解(2)
首先纠正下上篇的一个描述性错误,对于invalidate和postInvalidate的区别: invalidate:在主线程内部更新时使用; postInvalidate:在非UI线程更新时使用,postInvalidate会把更新要求回传至ViewRootImpl中进行响应; 延续上文内容,进一步针对View的基本概念做详细介绍,接下来我们将学习编写自己的第一个自定义V...原创 2018-09-25 16:30:47 · 181 阅读 · 0 评论 -
自定义View详解(3)
大家教师节快乐啊,不知道勤学的Coder们有没有去尝试下绘制上篇文章中最后留下的进阶效果,不管怎样,还是一起动手写一遍吧!看看套路是否一致。水波纹首先来看图-水波纹中的效果,其具有以下特点: 从内到外四层,内圆外环; 从内到外四个色值; 最内部圆局于View中心; 圆和环同心; 看出以下几点,我们就可以开始按照套路画图了,老套路走起(...原创 2018-09-25 16:33:21 · 242 阅读 · 0 评论 -
自定义View详解(4)
在上文中我们简单介绍了Canvas#drawCircle()的使用方式,以及Paint#setStyle(),Paint#setStrokeWidth(),Paint#setColor()等相关函数,不知道小伙伴们了解了多少?那么是不是所有的图形都能通过圆来描述呢?当然不行,那么熟悉API套路的我们就应该知道,这时候应该去看Canvas源码中提供的公有方法是否能满足我们的需求,这样我们就会看到...原创 2018-09-29 11:27:28 · 237 阅读 · 0 评论 -
View详解(5)
上篇中简单介绍了Path#moveTo(),Path#lineTo(),Path#addArc(),不知道勤劳的猿们学习的怎么样了。接下来我们还是以Path为主进行介绍,首先再回头看下上次最后说要实现的效果吧: 废话不多说,动手撸起。形成过程仔细观察上图,不难发现该动画起于三角形,止于类圆,每次动态添加一个顶点,附图说明如下: 相信有上图,大家理解起来就很easy...原创 2018-10-18 17:20:15 · 238 阅读 · 0 评论 -
View详解(6)
废话不多说,直接进入正文,上文中我们已经看到了这篇要实现的动画效果如下:我们可以看到该动画由两个主要元素构成: 张合的怪物脸 从右向左移动的食物 关于从右向左移动的食物,相信各位亲们第一眼就想到了位移动画,那么在Canvas绘制时,怎么做到动画呢?前篇的经验已经很多了,让圆心坐标成为动点,通过 ValueAnimator改变圆心坐标就好(PS:我这里建议做成 mS...原创 2018-10-18 17:21:34 · 240 阅读 · 0 评论 -
View详解(7)-六边形加载动画
前几篇中我们学习过了一些规则及不规则图形的绘制技巧,不知道大家理解是否到位,这篇文章中将继续前文主题,研究Path的基本应用,前文中我们已经基本了解了Path的构建,接下来我们来学习一种比较炫酷的动画方案-路径动画,路径动画指的是某一图形或者控件按照固有路径进行绘制或者运动。下面展示的就是一个典型的路径动画: 下面我们一起学习下如何实现该动画。形成过程按照惯有思路,我们观察...原创 2018-11-06 16:50:08 · 395 阅读 · 0 评论 -
Android自定义drawable-----各种各样的Loading效果
接着我们上一年的博眼球的主题,接下来的这篇我们仍然以UI效果为题开展主题推送,相信小伙伴们或多或少都做过App开发,App中最常见的一类UI效果,自然就是各种各样的Loading了,这篇文章我们就以Loading入手,介绍一种加载动画的思路,废话不多,直接进入正题。以上图为例,要实现一个动画,我们首先应该观察,在整个动画过程中,那些是变化的,那些是静止的,从而考虑策略,进行实现。仔细观...原创 2018-11-06 16:51:54 · 1544 阅读 · 0 评论 -
使用SlidingPaneLayout实现左滑菜单
众所周知,在Google的Support包中发布了众多令人激动的控件,大大方便了我们实现界面效果,提高开发效率,今天我们来学习一下SlidingPaneLayout: SlidingPaneLayout位于SupportV4包中,要使用它,我们首先要在build.gradle文件中添加项目依赖,如下所示:compile 'com.android.support:support-v4:25.1.0'原创 2017-01-02 23:18:29 · 1193 阅读 · 0 评论 -
Android 基础[Values添加Float和Integer]
Android 基础[Values添加Float和Integer]@(Android)[Java, Layout, View]Android 基础Values添加Float和IntegerValues添加Integer和Float添加Integer读取Integer添加Float读取FloatValues添加Integer和Float添加Integer直接使用Integer标签,如下:<i原创 2017-11-06 12:56:45 · 1148 阅读 · 0 评论 -
Android MediaCodec[官网翻译]
Android MediaCodec[官网翻译]@(Android)[HTML, CSS]Google中国开发者网站MediaCodec是用来访问系统底层编解码器的一个类,通常与MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, AudioTrack等一起使用。作为与底层编解码器交流的工作类,Me原创 2017-11-13 10:43:40 · 888 阅读 · 0 评论 -
TextView 使用Selector设置颜色
TextView 使用Selector设置颜色新建text_color_selector.xml文件,修改内容如下:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="原创 2016-04-07 14:09:25 · 827 阅读 · 0 评论 -
Android绘图基础
Android绘图基础了解前端的都知道H5里面有Canvas,Android里面也有Canvas,接下来我们会逐步使用Canvas来绘制一些基本图形,了解Canvas绘图机制。获取Canvas对象获取canvas对象有三种方式:重写View的onDraw方法自己创建Canvas对象,代码如下 Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Conf原创 2016-04-06 21:09:00 · 323 阅读 · 0 评论 -
Android事件系统(1)
Android事件系统(1)我们都知道触摸屏幕可以得到应用响应,例如说我们点击屏幕中的一个按钮,可以弹出一个对话框或者吐司,那么这个触屏事件从产生一直到得到响应是如何在Android系统中传递的呢?接下来我们将用一段时间去阐述Android系统的事件分发处理流程。MotionEvent假设现在我们有如下需求需要去实现:监听返回键监听某一按钮的触摸事件实现一个随手指移动的TextView接下来原创 2016-04-06 13:30:05 · 613 阅读 · 0 评论 -
ListView的使用
Use ListViewListView是用于将子项展示成垂直滚动的一个控件,其子项通常来源于一个适配器(Adapter),其在界面上的一般情况如下图所示:接下来让我们一起实现一个简单的ListView的例子,打开Android Studio,新建ListViewDemo项目并修改其xml文件如下所示:<?xml version="1.0" encoding="utf-8"?><RelativeL原创 2016-04-05 13:27:28 · 306 阅读 · 0 评论 -
Android图片加载(3)
缓存(LruCache)为了加快图片加载速度,我们经常需要将已加载好的一定数量的图片存放于内存中,以提高用户体验,这里我们使用LruCache类实现内存缓存。LruCache类位于android.util包内,可以通过以下代码进行声明:private android.util.LruCache<String, Bitmap> mMemoryCache;通过如下函数可以进行LruCache的初始化:p原创 2015-11-03 13:17:30 · 576 阅读 · 0 评论 -
Android图片加载(4)
异步任务(LoadAsyncTask)好久没更新了,最近单位很忙,这节我们主要实现图片的异步加载,首先我们简要的介绍一下异步任务:AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. AsyncTask定义了三种泛型类型 Params,Prog原创 2015-11-18 23:10:08 · 308 阅读 · 0 评论 -
Android图片加载(2)
缩略图上一篇博客我们讲述了怎么查找所有图片信息,其中包括构造实体对象以及使用Cursor,ContentResolver,MediaProvider类进行数据查找,还没有看过的小伙伴可以点击这里哦上一讲接下来我们要干的工作就是拿到视频和照片的缩略图,吼吼,这里面回用到ThumbnailUtils和MediaMetadataRetriever类。图片缩略图的获取 由于用到的类和代码都比较简单,我直接原创 2015-11-01 17:41:49 · 349 阅读 · 0 评论 -
Android图片加载(1)
查询所有图片最近一直在研究图片加载框架,接下来的一系列博客中,我将采取几种方式展示Android应用图片加载,大概会涉及到以下知识点:AsyncTask多线程线程池ExecutorServie副线程Ui刷新的方式LruCacheDiskCache 接下来就让我们一起进入今天的环节吧,谈到图片加载,我们自然而然想到的第一个问题就是图片从哪里来,怎么拿到图片? 想知道答案?那就接着往下看原创 2015-10-30 23:43:10 · 770 阅读 · 7 评论 -
Android沉浸式状态栏
新建项目,并新建 Abstarct BaseActivity继承自AppCompatActivity新建虚方法:public abstract void initView(Bundle saved); public abstract void initData();打开build.gradle文件,加入沉浸式状态栏依赖如下:compile 'com.readystatesoftware.sy原创 2016-04-13 11:24:35 · 640 阅读 · 0 评论 -
Android事件系统(2)ClickableSpan In Clickable TextView
ClickableSpan In Clickable TextView我在使用ClickableSpan时想实现以下功能,点击ClickableSpan进入事件1,点击TextView中剩余部分进入事件2,不幸的是,我发现在默认情况下,点击ClickableSpan区域会同时触发TextView的OnClick事件和ClickableSpan的onClick事件,而且在响应时,明显感觉到TextVi原创 2016-04-28 15:56:43 · 1279 阅读 · 0 评论 -
Groovy基础
1.Groovy简介 Groovy存在的目的是为需要脚本语言的Java开发者填补漏洞,Groovy非常简洁,易于使用,可与java很好的共同运行并具有一些非常适用于创建特定领域语言的特殊功能,Gradle甚至提供了其自身的Groovy版本,因此我们甚至不需要安装Groovy,我们只需要将Groovy代码置于创建的build.gradle文件中,然后就可以要求gradle执行该文件中定义的任何任务。原创 2017-02-15 23:38:59 · 358 阅读 · 0 评论 -
Gradle与项目构建
最近发现有好多朋友问和Gradle相关的东西,于是决定写一系列博客,简单备用。随着项目的逐步扩大与Android市场上应用需求的多样化,越来越多的应用需要集成众多的三方库与其它依赖,在Google推出的最新idea Android Studio中,引入Gradle用于项目构建工具,那么构建工具有什么优势呢?构建工具的主要优势有以下几点:便捷性(Portability)自动化(Automation原创 2017-02-09 23:21:26 · 1214 阅读 · 0 评论 -
Android-Data Binding
简介Data binding 在2015年7月发布的Android Studio v1.3.0 版本上引入,在2016年4月Android Studio v2.0.0 上正式支持。目前为止,Data Binding 已经支持双向绑定了。Databinding 是一个实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具,有了 Data Binding,在Android中也可以很方便的实现MVVM翻译 2016-12-17 00:05:23 · 436 阅读 · 0 评论 -
ListView
1.ListView ConvertView重用机制如下图所示: 如上图所示: 在滑动过程中,ListView重用View以优化内存。 在我们使用ListView的过程中,采用ViewHolder机制的主要原因是ViewHolder使得我们不必再进行findViewById(int id)的操作(遍历过程是一个深度优先树)。2.ListView与Adapter关系如下图所示:原创 2016-09-28 22:14:55 · 280 阅读 · 0 评论 -
Android Service简介
Android Service简介接下来我们将从以下几个方面介绍Service:什么是ServiceService的生命周期Service相关权限进程生命周期 什么是ServiceService是Android四大组件之一(PS:四大组件为:Service,Broadcast,Content Provider,Activity),用于展示一个应用的长时间操作,这种操作的特点是不与用户翻译 2016-09-09 22:16:17 · 427 阅读 · 0 评论 -
Android-Prefrence实现选项页面简介
Android-Prefrence实现选项页面简介(1)在Android开发中,我们经常遇到各种各样的列表选择页面,例如说Setting的页面,或者说出现的各种选择控件列表,使用XML编写显得冗长费时,使用ListView,RecyclerView之类的控件又无法应对多半环境,此时,我们就可以考虑采用Prefrence来实现界面效果,还等什么?让我们来一起了解一下吧!1.Prefrence继承关系图原创 2016-09-06 00:00:58 · 727 阅读 · 0 评论 -
Android Support Design Library之CollapsingToolbarLayout
Android Support Design Library之CollapsingToolbarLayout原创 2016-04-29 16:38:24 · 312 阅读 · 0 评论 -
Android横竖屏切换
Android横竖屏切换作为自己啃英文的随笔记录,这篇中主要以Android横竖屏切换时Activity生命周期变化及解决方案为主。在横竖屏切换时Activity会被销毁并重新创建,带来用户体验不佳。 具体解决方案有以下三种: (1)保存用户信息[切换时还原] 重写onSaveInstanceState函数,该函数会在Activity被销毁前执行,在onRestoreInsta原创 2015-05-26 17:09:53 · 418 阅读 · 0 评论