![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 82
吃骨头不吐股骨头皮
在枯燥的學習過程中,需要給自己設定一個切實可行的目標
展开
-
buildConfigField失败:defaultConfig contains custom BuildConfig fields, but the feature is disabled.
Android开发中,在当前module的build.gradle构建buildConfigField字段报错:defaultConfig contains custom BuildConfig fields, but the feature is disabled.原创 2023-04-27 11:18:51 · 4007 阅读 · 1 评论 -
Android请求应用权限
在应用的清单文件中,声明应用可能需要请求的权限。如需声明应用可能请求的权限,请在应用的清单文件中添加相应的 元素。例如,如果应用需要访问相机,则应在 AndroidManifest.xml 中添加以下代码行:设计应用的用户体验,使应用中的特定操作与特定运行时权限相关联。告知用户哪些操作可能会要求他们向您的应用授予访问其私人数据的权限。等待用户调用应用中需要访问特定用户私人数据的任务或操作。届时,您的应用可以请求访问相应数据所需的运行时权限。检查用户是否已授予应用所需的运行时权限。如果已授权,那么您的原创 2022-12-05 00:11:28 · 3176 阅读 · 0 评论 -
MediaPipe手势(Hands)
1、Ubuntu上安装MediaPipe2、Ubuntu上构建Android的MediaPipe3、Ubuntu上构建MediaPipe Android Archive (AAR)最近刚好有手势识别的需求,所以就看到了MediaPipe的Hands,识别出各个手势的节点坐标,然后简单的计算手势。这一篇主要是对上一篇编译aar库的补充,因为正式使用上我们自己编译的hands aar库。命令如下:2.MediaPipe的Hands例子打开Android studio,导入Android MediaPip原创 2022-06-14 18:11:12 · 2156 阅读 · 2 评论 -
Ubuntu上构建MediaPipe Android Archive (AAR)
MediaPipe 为直播和流媒体提供开源跨平台、可定制的 ML(机器学习) 解决方案。本文是接我上两篇文章:1、Ubuntu上安装MediaPipe2、Ubuntu上构建Android的MediaPipe官方的解释:大体意思就是:在 MediaPipe 目录中,在 BUILD 文件中创建一个新的 mediapipe_aar() 目标。您需要弄清楚图中使用了哪些计算器,并将计算器依赖项提供给 mediapipe_aar()。官方的描述还是挺官方,我们以人脸检测为例子,演示这个过程。步骤:然后使用你擅长原创 2022-06-13 17:36:16 · 1382 阅读 · 2 评论 -
Ubuntu上构建Android的MediaPipe
MediaPipe 为直播和流媒体提供开源跨平台、可定制的 ML(机器学习) 解决方案。MediaPipe的安装可以看我上一篇文章:Ubuntu上安装MediaPipeMediaPipe是使用Bazel进行构建的,因此需要按照官网MediaPipe安装步骤或者我提供的MediaPipe安装步骤将MediaPipe安装到你的电脑上安装命令如下,不配置JAVA_HOME环境也是可以的3、配置Android SDK的版本,至少为30.0.04、配置Android NDK的版本,在18和21之间(包含18和2原创 2022-06-10 14:11:27 · 1746 阅读 · 4 评论 -
Android的RecyclerView.ItemDecoration使用
文章目录前言一、RecyclerView.ItemDecoration是什么?二、使用步骤1.引入库2.设置装饰器2.1 在Activity或者Fragment中设置装饰器2.2 实现MaintenanceItemDecoration,继承于RecyclerView.ItemDecoration()1、实现getItemOffsets方法,代码如下2、给底部留白部分加上节点,实现onDraw方法3、MaintenanceItemDecoration完整代码3.完成最终版带进度更新的装饰器3.1 设置装饰器3原创 2022-05-14 17:54:15 · 2580 阅读 · 1 评论 -
The application could not be installed: INSTALL_FAILED_TEST_ONLY解决方案
项目场景:调试应用,安装apk失败Installation did not succeed.The application could not be installed: INSTALL_FAILED_TEST_ONLYList of apks:[0] 'D:\develop\work\StarEra\arguesture\app\build\intermediates\apk\debug\Gesture-2022-05-05-debug.apk'Installation failed due原创 2022-05-05 16:31:58 · 10681 阅读 · 1 评论 -
Jetpack Room基本用法
文章目录前言一、Room是什么?主要组件二、使用步骤1.引入库2.定义数据实体2.1 定义主键2.2 忽略字段2.3 完整代码如下(示例):3.使用 Room DAO 访问数据3.1 插入3.2 更新总结文章参考前言日常开发中,总会遇到需要将数据持久化在本地,供需要的时候使用。本地数据持久化例如:文件保存、SharedPreferences(DataStore,sp的替代者)、数据库等等。简单的键值对信息我们直接使用SP保存在xml中就可以了,但是更加复杂的信息就需要数据库(SQLite)上场了。原创 2022-05-03 22:42:48 · 2087 阅读 · 0 评论 -
Android gradle配置签名文件
项目场景:使用命令行生成apk的时候自动签名打包命令Linux# 同时生成release和debug的apk./gradlew clean build./gradlew clean assemble# 分别打包release和debug的apk./gradlew clean assembleDebug./gradlew clean assembleReleaseWindows# 同时生成release和debug的apkgradlew.bat clean buildgradle原创 2022-04-27 22:35:26 · 5008 阅读 · 0 评论 -
Android ContentProvider使用
ContentProvider前言一、ContentProvider是什么?二、使用步骤1.访问方式2.创建ContentProvider2.1. 构建ContentProvider步骤2.2. Uri讲解3.查询4.插入5.修改6.删除总结前言我们需要了解ContentProvider最好的方式就是查看Android官方文档:ContentProvider基础知识.通常ContentProvider有两种使用场景一种是通过实现代码访问其他应用中的现有内容提供程序;另一种是在应用中创建新的内原创 2022-04-23 21:40:17 · 7458 阅读 · 2 评论 -
Android中使用Protocol Buffers
Protocol BuffersProtocol BuffersAndroid studio中配置Protocol Buffers1. 在Project的build.gradle中配置2. 在app module或者其他module中配置2.1. 首先引入插件2.2. 在android{}中配置2.3. 引入Protocol Buffers的库Protocol Buffers使用Protocol Buffers就懒得介绍了,直接使用官网的介绍协议缓冲区是Google的与语言无关,与平台无关,可扩展的原创 2021-03-31 14:59:11 · 499 阅读 · 0 评论 -
Android字母索引侧边栏
字母索引侧边栏在日常的开发中,特别是IM联系人或者电话簿应用等等用处还是挺广泛。效果图:需要熟悉的内容1、根据需求,考虑需要暴露哪些自定义属性2、熟悉自定义View中文字的测量,绘制3、熟悉自定义View的测量思路:1、测量每个文字(字母)占用的高度,计算出View总的高度,测量文字的宽度,使用setMeasuredDimension将测量的宽高赋值2、根据需求绘制3、处理手指触摸事件实现代码:代码的注释写的应该还算清楚,可以根据自己的需求进行修改,我这里没有处理padding原创 2021-02-14 15:40:31 · 663 阅读 · 2 评论 -
自定义雷达图
原文:Android雷达图(蜘蛛网图)绘制其实雷达图理解起来还是很简单,就参考原文自己写了下,做个记录效果图:代码:public class RadarView extends View { private static final String TAG = "RadarView"; private static final int DEFAULT_SIZE = 300; private String[] dataTitles = {"A", "B", "C", "D",原创 2020-11-23 14:12:24 · 399 阅读 · 0 评论 -
自定义带进度条的播放暂停按钮
自定义View分为两种:1、实现View的自定义View1.1、实现onMeasure1.2、实现onDraw2、实现ViewGroup的自定义View(还可以直接实现系统已实现的控件,比如集成LinearLayout等等)2.1、实现onMeasure2.2、实现onDraw2.3、实现onLayout自定义组合控件: 把日常共用的一些布局组合成共用的控件,有点类似在xml中使用include标签我们实现的这个控件很简单,继承View来实现就行,先上效果再开始coding一、实现自定原创 2020-11-13 16:15:20 · 374 阅读 · 0 评论 -
组件化二、APT+JavaPoet配合搭建组件化架构
1、APT(注解处理器)介绍APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,根据注解主动生成代码,如果想要自定义注解处理器能够正常运行,必须要通过APT工具来进行处理。也可以这样理解,只有通过申明APT工具后,程序在编译期间自定义注解处理器才能执行通过来讲:根据规则,帮我们自动生成代码,生成类文件Google提供了APT的库(Java库),后面会介绍如何导入使用2、Element程序元素Package原创 2020-10-02 15:46:34 · 390 阅读 · 0 评论 -
组件化一、组件化结构搭建
gradle的配置可以看这篇文章组件化预热:gradle简单使用组件化的配置,我们还是通过build.gradle文件来配置一、config.gradle创建创建config.gradle文件,并且使用变量 isRelease = true来判断到底是将不同的Module单独打包测试,还是最终的发布版本(集成到一个apk)ext { // 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式 // false: 组件化模式(子模块可以独立运行),tru原创 2020-09-21 01:06:13 · 224 阅读 · 0 评论 -
组件化预热:gradle简单使用
日常开发中,不管在APP的Module或者Library的Module中1、引入一些共用三方库2、共有的编译库,比如compileSdkVersion,都是各自为政,没有做一个统一的管理现在我们新建一个config.gradle文件来存储一些共有的部分。一、config.gradle的创建使用我们直接将我测试的config.gradle文件新建出来,如下代码,下面来慢慢解释// 添加多个自定义属性,可以添加在ext代码块ext { username = "zhangsan"原创 2020-09-21 00:20:38 · 246 阅读 · 0 评论 -
Handler、Looper、MessageQueue消息处理讲解
一、Handler的使用可以查看我这篇文章Handler的使用和内存泄漏处理二、源码分析Handler消息处理的流程我们要玩的东西也不是很难,我们通过源码来分析Handler如何发送消息到MessageQueue,然后Looper如何如何将消息从MessageQueue取出分发给Handler。(一)、创建主线程的MessageQueue和Looper对象首先查看应用的主线程ActivityThread的main方法public static void main(String[] args原创 2020-09-05 00:41:10 · 317 阅读 · 0 评论 -
慢学Android Jetpack
什么是jetpack,就“盗”Google官方的解释。 Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。 Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Andro原创 2020-07-22 21:06:50 · 132 阅读 · 0 评论 -
Android Studio搭建FFmpeg环境
搭建NDK工程的时候特别要注意踩坑,平时基本没玩过NDK的东西,第一次搭建FFmpeg的环境就被坑爹了不知道从Android studio哪个版本开始,创建native c++的项目“CMakeLists.txt”文件就被放在src/main/cpp文件夹下了,以前最早的工程这个文件是被放在app路径下的(跟build.gradle是同一级)。搭建FFmpeg的环境,需要在Linux环境下编译FFmpeg库一、FFmpeg最新的搭建将FFmpeg的lib库和头文件全部放在src/main/cpp.原创 2020-06-22 01:09:12 · 628 阅读 · 0 评论 -
SVG图使用(笔记)
开发中遇到画不规则的图像的时候,我们往往通过自定义View,然后自己在onDraw去绘制可能会很麻烦。这时候我们就可以使用SVG图,可以让UI将需要实现的效果设计好导出为SVG图。SVG图的特性svg可被非常多的工具读取和修改svg与JPEG和GIF比起来,尺寸更小,可压缩性更强svg是可伸缩的svg图可以在任何分辨率下被高质量的打印svg可在图像质量不下降的情况下被放大svg图像...原创 2019-11-15 00:22:00 · 390 阅读 · 0 评论 -
Android Material Design常规使用
一、Material Design主题android:style/Theme.Materialandroid:style/Theme.Materail.Lightandroid:style/Theme.Materail.Light.DarkActionBar二、Material Design兼容主题Theme.AppCompat.LightTheme.AppCompat.Light.D...原创 2019-11-07 00:00:08 · 320 阅读 · 0 评论 -
Android常用屏幕适配方式
屏幕适配原因:Android设备碎片化,导致APP的界面元素在不同的屏幕尺寸上显示不一致。目的:让布局,布局组件,资源,用户界面流程,匹配不同的屏幕尺寸。屏幕适配常见方式布局适配1、避免写死控件尺寸,使用match_parent,wrap_content。2、LinearLayout使用android:layout_weight=“1”,android:weightSum="4"等...原创 2019-10-30 00:47:37 · 565 阅读 · 0 评论 -
Android事件分发简单分析(源码分析)
想玩转自定义View,我们需要了解事件分发流程,知道具体的触摸事件怎么去处理、消费。事件定义:当用户触摸屏幕时,会产生触摸行为。一、常用的事件的类型(四种):MotionEvent.ACTION_DOWN 手指刚接触屏幕MotionEvent.ACTION_MOVE 手指在屏幕上滑动MotionEvent.ACTION_UP 手指从屏幕松开MotionEvent.ACTION_...原创 2019-10-23 00:53:53 · 187 阅读 · 0 评论 -
Path基础之PathMearsure详解
PathMeasure路径测量,用来测量path的工具类。原创 2019-10-20 19:59:48 · 581 阅读 · 0 评论 -
Android自定义View之Path基础(一)
Path类封装由直线段,二次曲线和三次曲线组成的复合(多个轮廓)几何路径。 可以使用canvas.drawPath(path,paint)进行填充或描边绘制(基于Paint的Style),也可以用于剪切或在路径上绘制文本。github上的示例...原创 2019-10-17 01:30:04 · 289 阅读 · 0 评论 -
实现广告倒计时、验证码倒计时按钮
一、广告倒计时调用广告倒计时类,实现一秒一秒的减少tvSkip.setText("5s 跳过");countDownTimer = new MyCountDownTimer(5000,1000);countDownTimer.start();定义一个广告倒计时类/** * 倒计时类 */ private class MyCountDownTi...原创 2018-04-07 16:59:15 · 408 阅读 · 0 评论 -
Android中多级树形列表
在一次开发中,碰到了多级树形列表的问题,不是我们平时使用的ExpandListView这种只有子父类两级的列表,而是层级更深。 推荐几个可以参考的博客: 1、鸿神的ListView实现多级树形列表 2、一个兄弟在鸿神的基础上修改的 我就是使用的这个兄弟的,在他的基础上修改为我所需要的效果。 3、也可以看看这个兄弟的,他就是参考上面1、2做出来的他想要的效果他们都是实现的多选,这次开发...原创 2018-04-07 16:15:02 · 2365 阅读 · 2 评论 -
DialogFragment的使用
可以参考另一个博主的文章Android 必知必会 - DialogFragment 使用总结 ** 背景 Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。而创建 DialogFragment 有两种方式: 覆写其 onCreateDialog 方法 — ① ...原创 2018-04-07 15:17:23 · 6441 阅读 · 0 评论 -
MPAndroidChart中饼图(PieChart)
饼图上一篇 我很懒没有去封装这些使用方法,想复用的点击下面这个链接,^_^。 另一个博主对MPAndroidChart一些方法的封装如果大家想要对饼图使用渐变,可以看下我的修改方式。 1、导入MPAndroidChart 2、找到renderer文件夹,然后找到PieChartRenderer.java 3、修改此处调用,如图 4、修改coloringLine()这个调用方法,...原创 2017-12-03 18:43:41 · 2575 阅读 · 0 评论 -
MPAndroidChart直方图(BarChart),渐变,左右滑动
上一篇单个直方图 上一篇多组直方图先来看一下效果 设置基础属性//设置每个直方图阴影为falsemBarChart.setDrawBarShadow(false);//这里设置为true每一个直方图的值就会显示在直方图的顶部mBarChart.setDrawValueAboveBar(false);//设置描述不显示mBarChart.getDescription().setEnabl原创 2017-12-03 18:32:24 · 5516 阅读 · 4 评论 -
MPAndroidChart折线图(LineChart)的使用,可以左右滑动
MPAndroidChart折线图(LineChart)的使用,可以左右滑动折线图实现渐变的补丁,直接跟着这个补丁实现就可以实现家变 楼主就不把修改的代码贴出来了,上面这个补丁讲的很清楚,^_^。 我上一篇的折线图来看看效果LineChart的使用可以看看别写的demo,这里列举一下我项目中用到的方法,大概可以解决我们碰到的基本需求。我们在使用的时候,可能会碰到服务器返...原创 2017-12-03 18:02:49 · 18843 阅读 · 16 评论 -
竖直ViewPager
给大家推荐一个竖直的ViewPager,忘了是哪个作者写的,还是在这里谢谢老铁,解决了我项目中的需要package com.iss.edu_manage.views.viewpager;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;翻译 2017-08-23 19:55:21 · 474 阅读 · 0 评论 -
MPAndroidChart直方图、多组(可滑动、渐变可以看博主前面讲直方图的博客)
分组直方图代码private void showBarChart() { setBarChartProperties(); setBarChartMarkView(); setXAxis(); setYAxis(); setBarChartLegend(); setBarChartData(xListVa原创 2017-08-23 19:45:31 · 1558 阅读 · 5 评论 -
MPAndroidChart直方图使用(BarChart),渐变,滑动
最近项目需要使用到图表的内容,网上看了下HelloCharts、MPAndroidChart最后选择了MPAndroidChart,写的不好,希望对大家有帮助我很懒没有去封装这些使用方法,想复用的点击下面这个链接,^_^。 另一个博主对MPAndroidChart一些方法的封装MPAndroidChart–BarChart使用BarChart的基本实现(实现可以左右滚动...原创 2017-08-23 18:33:31 · 6094 阅读 · 1 评论 -
MPAndroidChart的PieChart,渐变
哈哈 我又来了 才写博客 写的不好请大家谅解 希望文章对大家有帮助 博主没有使用渐变,但是还是把渐变的代码给大家贴出来,博主试了下,可以实现private void coloringLine(IPieDataSet dataSet, Paint renderer, float pointX, float pointY, float radious) { coloringLi原创 2017-08-23 19:24:50 · 2574 阅读 · 0 评论 -
SQLite数据库操作(原生操作,GreenDao操作)
使用原生的操作方法首先实现一个DataBaseOpenHelper继承SQLiteOpenHelper public class DataBaseOpenHelper extends SQLiteOpenHelper { //数据库版本号 private static int INIT_VERSION = 1; private static final Stri...原创 2018-04-07 17:45:14 · 2594 阅读 · 0 评论 -
RecyclerView实现单选、多选
在我们平时的开发中可能会用到简单的列表单选功能,ListView没有去尝试过,这里介绍下RecyclerView的单选功能。我们是在Adapter中实现单选public class ChoicePopupwindowAdapter extends RecyclerView.Adapter<ChoicePopupwindowAdapter.ChoicePopupwindowViewHo...原创 2018-04-07 13:57:43 · 3276 阅读 · 0 评论 -
Android中不一样的多级树
多级树形结构:我前面有过一篇使用多级树形结构的文章Android中多级树形列表,但是我们实际开发中可能会有不同的需求,本文楼主会提供一个思路供大家参考。多级树如下图,是楼主需要的多级树 需求:1、人员有分组的,显示在每一个组的分组下,没有分组的人员跟每一个组名同一级。2、每一个分组继续重复1的操作。实体类的数据结构,懒得去获取数据,将就着看吧public clas...原创 2018-05-27 20:52:17 · 427 阅读 · 0 评论 -
Android自定义View之Canvas基础
画布:通过画笔绘制几何图形、文字、路径(Path),位图(Bitmap)等绘制内容我们需要准备:一个用于容纳像素的位图,一个用于承载绘制调用的Canvas(写入位图),一个绘制图元(例如Rect,Path,文本,位图),一个绘制( 描述图纸的颜色和样式)。Canvas常用的API大概分为:绘制、变换、状态保存和恢复。一、变换二、绘制图形绘制、文字绘制、路径绘制、位图绘制等...原创 2019-10-09 10:29:10 · 399 阅读 · 0 评论