Android开发总结
文章平均质量分 70
zdj_develop
这个作者很懒,什么都没留下…
展开
-
从Android源码角度,深度分析Handler机制
Handler作为Android开发中,线程间通信的常用方案,其内部的机制原理到底是怎样的呢?我们这篇文章,来一探究竟。原创 2023-01-03 10:46:39 · 540 阅读 · 1 评论 -
Android Telephone
我们实现了通信能力:第一、我们支持sip固话通信功能,是一个完整的电话程序。我们支持sip呼出、sip呼入,打开/关闭扬声器,调整自己说话音量、调整对方音量,调起拨号盘进行指令输出。第二、axb双呼。流程就是我们调用后端的借口,然后后端调用运营商的接口,然后运营商通过中间号打电话过来,并且打电话给我们要打的那个号码,然后我们之间建立了通信。第三、支持axb双呼的自动接听,支持使用我们的程序替代系统默认电话程序。这里我们先主要说下,我们的程序替代系统默认电话程序。首先需要将我们的APP原创 2021-09-24 14:53:45 · 720 阅读 · 0 评论 -
实现一个通用的支持输入原因并且可以滑动消失的Dialog
package com.zdj.zdj_library.widget;import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import a.原创 2021-08-12 16:38:38 · 357 阅读 · 0 评论 -
View源码之scrollBy()、scrollTo()解析
scrollBy()源码:/** * Move the scrolled position of your view. This will cause a call to * {@link #onScrollChanged(int, int, int, int)} and the view will be * invalidated. * @param x the amount of pixels to scroll by horizontally * @param y the amount原创 2021-08-11 10:37:53 · 368 阅读 · 1 评论 -
View的绘制
measure layout drawmeasure:测量宽、高layout:确定在父容器中的位置,布局draw:绘制在屏幕上一、总体流程:视图的测量、布局、绘制都是按照视图树从上到下的,大致可分为DecorView--->ViewGroup--->View这样三个层级。当Activity对象被创建完成,会将DecorView添加到Window中(显示),同时创建ViewRoot的实现对象ViewRootImpl与之关联。ViewRootImpl会调用perfor原创 2021-08-04 18:10:19 · 287 阅读 · 0 评论 -
android:windowSoftInputMode属性详解
android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题。这个属性能影响两个事情:【一】、当有焦点产生时,软键盘是隐藏还是显示【二】、是否减少活动主窗口大小以便腾出空间放软键盘它的设置必须是下面列表中的一个值,或者多个值的组合。值含义stateUnspecified软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置stateUnchanged当这个activity出现时,软键盘将一原创 2021-04-07 19:27:37 · 564 阅读 · 0 评论 -
《View事件体系专栏》二------>关于事件分发的一些结论
(1)同一个事件序列是指从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件,这个事件序列以down事件开始,中间含有数量不定的move事件,最终以up事件结束。(2)正常情况下,一个事件序列只能被一个View拦截且消耗。这一条的原因可以参考(3),因为一旦一个元素拦截了某此事件,那么同一个事件序列内的所有事件都会直接交给它处理,因此同一个事件序列中的事件不能分别由两个View同时处理,但是通过特殊手段可以做到,比如一个View将本该自己处理的事件通过onTouchEven原创 2020-10-02 16:37:42 · 142 阅读 · 0 评论 -
唤起地图应用进行路线规划、导航
需求:在APP中唤起地图应用(高德地图/百度地图/腾讯地图)进行路线规划、导航。前提:系统支持(即系统支持唤起第三方地图软件,并直接进入对应的模块,目前来看,Android、iOS、web/h5都是支持的)。原理:使用地图方(高德地图/百度地图/腾讯地图)开放的能力。链接:高德地图:https://lbs.amap.com/api/amap-mobile/guide/android/navigation百度地图:http://lbsyun.baidu.com/index.php?title=uri原创 2020-09-06 09:13:17 · 1164 阅读 · 0 评论 -
Android APP如何实现支付宝支付
一、背景介绍:业务需求需要,故加入支付宝支付功能。 二、如何实现。1、关于APP调用支付宝支付的大致流程:商家APP调用支付宝提供的SDK,SDK再调用支付宝APP内的支付模块。如果用户已经安装支付宝APP,商家APP会跳转到支付宝中完成支付,支付完后跳回到商家APP内,最后展示支付结果。如果用户没有安装支付宝APP,商家APP会调起支付宝网页支付收银台,用户登录支付宝账户,支...原创 2018-12-07 09:39:46 · 3784 阅读 · 0 评论 -
自定义View系列(十)
自定义View实战之自定义Gallery,实现3D效果Gallery,画廊。一个锁定中心条目并且拥有水平滚动列表的视图。我们使用Gallery来实现图片预览效果,并实现3D效果。附上详细代码:public class GalleryFlow extends Gallery { private Camera mCamera = new Camera(); pr...原创 2018-08-12 18:34:41 · 212 阅读 · 0 评论 -
自定义View系列(九)
自定义View实战之自定义View.使用Canvas、Paint等来实现图片编辑功能(包括普通涂鸦、画圆、画矩形、画箭头、写字)具体请见我之前写过的另一篇博客Android自定义View 实现图片编辑功能(包括普通涂鸦、画圆、画矩形、画箭头、写字)...原创 2018-08-12 17:04:56 · 243 阅读 · 0 评论 -
自定义View系列(八)
自定义View实战之自定义实现监听滑动到底部的ScrollViewAndroid是默认没有提供监听ScrollView滑动到底部的API的,因此,如果我们需要监听ScrollView是否滑动到底部,我们需要自定义ScrollView。先直接上代码:public class ScrollBottomScrollView extends ScrollView { priva...原创 2018-08-02 16:30:51 · 217 阅读 · 0 评论 -
自定义View系列(七)
自定义View实战之自定义LinearLayout,该LinearLayout用于包EditText,解决EditText与ScrollView的滑动冲突当EditText放在ScrollView里面,存在滑动冲突。注:当EditText中内容的高度大于EditText的高度时,我们需要滑动EditText。我们要解决掉这个滑动冲突,实现:1、当EditText中的内容的高度...原创 2018-08-02 16:12:33 · 233 阅读 · 0 评论 -
自定义View系列(六)
自定义View实战之自定义实现数字提示功能的ImageView先直接上代码:public class NumberHintView extends ImageView { private int num = 0; //要显示的数量 private float radius; //圆圈的半径 private float textSize; //数字的大...原创 2018-08-02 15:58:16 · 215 阅读 · 0 评论 -
自定义View系列(五)
自定义View实战之自定义水平循环滚动的ProgressBar直接上代码,附详细注释。public class HorizontalLoopProgressBar extends View { private int color; //短线的颜色 private float lineWidth; //短线的宽度 private float space; ...原创 2018-08-02 15:13:09 · 211 阅读 · 0 评论 -
自定义View系列(四)
自定义View实战之自定义下拉放大头部图片的ScrollView一、原理:获得要放大的控件,并获取其宽高 在顶部时继续往下拉,通过LayoutParams改变控件的宽高 手指抬起时初始化各项参数,通过属性动画回弹控件二、实现:public class HeadZoomScrollView extends ScrollView { public HeadZoomSc...原创 2018-08-02 14:18:06 · 230 阅读 · 0 评论 -
自定义View系列(三)
自定义View实战之自定义满足搜索功能的EditText如何实现呢?直接上代码,附详细注释。public class SearchEditText extends EditText implements OnFocusChangeListener, TextWatcher { /** * 删除按钮的引用 */ private Drawable m...原创 2018-08-02 13:35:16 · 182 阅读 · 0 评论 -
自定义View系列(二)
一、自定义View实战之自定义取消预加载机制的ViewPagerViewPager默认具有预加载机制,那么如何取消这个预加载机制呢?其实很简单,只需要修改ViewPager的源码,将其中的常量DEFAULT_OFFSCREEN_PAGES的值改成0就行了,这个值默认为1。注:viewPager有一个setOffscreenPageLimit方法,有人会想我...原创 2018-08-02 13:21:41 · 231 阅读 · 0 评论 -
TextView设置图片
之前写过一篇关于TextView的文章[Android采坑之TextView实际高度比TextSize大]今天再来写一篇关于TextView的文章,介绍TextView设置图片。TextView设置图片有两种方式:xml、代码举例:我们要在TextView的右边显示一张图片,可以这样做:android:drawableRight="@mipmap/down_arrow_2"也可以这样做...原创 2019-02-18 16:55:13 · 649 阅读 · 0 评论 -
Android O通知适配
前言:从Android O(Android 8.0)开始,Google引入了通知渠道的概念。什么是通知渠道呢?顾名思义,就是每条通知都要属于一个对应的渠道。每个App都可以自由地创建当前App拥有哪些通知渠道,但是这些通知渠道的控制权都是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃、是否振动、或者是否要关闭这个渠道的通知。对于每个APP而言,通知渠道的划分是非常需要仔...原创 2019-03-14 20:12:50 · 599 阅读 · 2 评论 -
Android N行为变更 解决Android N上报android.os.FileUriExposedException
记得之前将项目的targetSdkVersion改成26之后,在Android 8.0的设备上报android.os.FileUriExposedException。今天想起这事,并且有时间,便将解决这个问题的整个过程记录下来。问题/现象:将项目的targetSdkVersion改成26之后,在Android 8.0的华为荣耀8手机上报android.os.FileUriExposedExce...原创 2019-03-15 17:29:36 · 375 阅读 · 0 评论 -
自定义ImageView实现圆角图片
自定义ImageView实现圆角图片,满足以下需求:1、四个角的度数均要支持自定义2、可以在布局当中添加自定义的度数实现步骤:1、自定义一个ImageView,继承自AppCompatImageView。(关于AppCompatImageView,继承自ImageView,是一个在平台的旧版本上支持兼容功能的imageView。)实现它的构造方法,创建一个init()方法,保证构造方法...原创 2019-10-11 14:03:32 · 507 阅读 · 0 评论 -
结合项目经验来谈使用MPAndoridChart的总结(二)
二、画折线图。效果如上。我们使用LineChart这个类。1、在布局文件中,<com.github.mikephil.charting.charts.LineChart android:id="@+id/lineChart" android:layout_width="m...原创 2019-08-07 20:48:32 · 767 阅读 · 0 评论 -
结合项目经验来谈使用MPAndoridChart的总结(一)
MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活,并且功能强大,有Android图表“一哥”的称号。其官方地址为:MPAndroidChart。使用时需要注意,不同版本的MPAndroidChart的API有所差异。我们项目中使用的是3.0版本。需...原创 2019-08-07 20:44:21 · 630 阅读 · 0 评论 -
关于Fragment的那些事
Fragment是当今Android APP设计中常用的一个东西了,可以把它理解为碎片,Fragment是依附于Activity的。前面有一篇文章详细介绍说Fragment的生命周期Android中Fragment的生命周期详解。今天,主要讲讲使用Fragment时的一些其他事情。情形一:我们经常会拿ViewPager和Fragment一起使用。由于ViewPager默认具有预加载机制(默认...原创 2019-08-03 17:44:46 · 358 阅读 · 0 评论 -
计算ListView的滚动距离
采用getScrollY()方法无效。直接ListView的滚动距离可采用如下方法: private int getListViewScrollY(ListView listView) { View itemView = listView.getChildAt(0); if (itemView == null) { retur...原创 2019-07-01 13:48:10 · 637 阅读 · 0 评论 -
说一说EditText(四)
之前写过【说一说EditText】系列,分别为说一说EditText(一)、说一说EditText(二)、说一说EditText(三)今天再写一篇关于EditText的文章,讲述EditText中如何设置提示文字的大小。有时,我们需要设置EditText的提示文字,并且为了美观,我们需要设置EditText的提示文字的大小和内容文字的大小一致。但是在xml中,是无法设置EditText的提示...原创 2019-04-17 14:36:21 · 261 阅读 · 0 评论 -
TextView与Html
Html首先,我们来看下Html这个类。Google官方定义:This class processes HTML strings into displayable styled text. Not all HTML tags are supported.(此类将HTML字符串处理为可显示的样式文本。并非所有的HTML标记都受支持。)我们紧接着在来看Html类的几个方法。public ...原创 2019-04-17 13:53:23 · 837 阅读 · 0 评论 -
Android中强大的SpannableStringBuilder
之前用过SpannableStringBuilder,今天有些时间,于是将这一块总结一下。前言:SpannableStringBuilder:This is the class for text whose content and markup can both be changed.(这是一个内容和标记都可以更改的文本类)SpannableStringBuilder有个亲兄弟Span...原创 2019-04-16 11:23:57 · 722 阅读 · 0 评论 -
APP接收通知处理逻辑项目实战经验总结
说在前面:关于Notification,我之前写过两篇博客,分别为Android之Notification详解和Android O通知适配。今天,我们来对APP接收通知处理逻辑进行项目实战经验总结。正文:说到通知,我们能想到的最简单的场景:点击手机上接收到的通知,跳转到对应的详情页。对应的代码示例如下: Intent mainIntent = new Intent(); ...原创 2019-03-28 11:26:25 · 838 阅读 · 0 评论 -
Android之Notification详解
Notification概述:Notification,属于Google原创。是一种具有全局效果的通知,可以在系统的状态栏以及通知面板中显示。Notification的作用:1、显示接收到及时信息,(如微信、QQ)。2、显示客户端的推送消息,如广告、优惠、版本更新、推荐新闻等。3、显示正在运行的事物,例如后台运行的程序,如音乐播放进度、下载进度等。Notification的基本操作:...原创 2019-03-13 20:25:30 · 620 阅读 · 0 评论 -
自定义View系列(一)
一、首先我们要明白为什么要自定义View,主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。自定义View的价值在于:1、能够做到基础控件无法做到的效果,为应用的表现增色;2、在多个应用并行开发的团队,将公用的交互效果提取成自定义控件,方便复用,减少不必要的重复劳动;3、将控件的内部逻辑封装在自定义View中,便于应用内解耦...原创 2018-08-02 11:27:08 · 176 阅读 · 0 评论 -
Android事件分发(二)
上篇文章主要讲了View的事件分发,这篇文章将带大家一起继续分析Android的事件分发。 一、我们先来看一下ViewGroup的事件分发。首先来了解一下ViewGroup,ViewGroup继承于View,它的已知直接子类有DrawerLayout、FrameLayout、GridLayout、LinearLayout、RelativeLayout、RecycleView、ViewP...原创 2016-12-09 15:50:09 · 386 阅读 · 0 评论 -
Android事件分发机制
一、Android中与Touch相关的方法有:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev)。 二、首先,我们来讲一下View的事件分发。 我们拿一个简单的例子:在一个Activity中有一个Button,然后 btn...原创 2016-12-09 09:56:40 · 715 阅读 · 0 评论 -
Canvas、Paint、TextPaint、StaticLayout
一、Canvasandroid.graphics.Canvas要画东西,需要四个基本部件:1、一个保存像素的位图;2、一个来承载绘图调用(写入位图)的Canvas;3、绘图基元(例如Rect,Path,文本,位图);4、画笔内部类:Canvas.EdgeType、Canvas.VertexMode 两个枚举类构造方法:Canvas()Canvas(Bitmap bitmap)方法:drawARG...原创 2018-03-09 15:34:18 · 1024 阅读 · 1 评论 -
Activity生命周期详解
在我的Android四大组件详解一文中已经对Activity的生命周期进行过一个比较详细的介绍。这篇文章我们再来更加深入地介绍Activity的生命周期。一、Activity的生命周期方法如下:onCreate、onStart、onRestart、onResume、onPause、onStop、onDestroy依次介绍:onCreate:表示Activity正在被创建,这是生命周原创 2018-01-14 16:18:46 · 5043 阅读 · 0 评论 -
Android之Sqlite升级
在实际开发当中,可能会遇到这种情况:当APP的一个新版本上线,需要本地Sqlite数据库表增加一个字段,老用户如何不卸载重装,则会崩溃。原创 2017-08-29 14:07:53 · 1009 阅读 · 0 评论 -
Android的armeabi、armeabi-v7a和arm64-v8a
在Android项目中,我们可能经常会使用到动态库文件(.so)。 通常,我们会在jniLibs下,放动态库文件,首先会有一个或者几个文件夹。 比如:armeabi、armeabi-v7a、arm64-v8a。这些文件夹名称是固定的, 那么这些名称分别代表什么意思呢? 其实这些是ABI(应用程序二进制接口),它们定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上。armeabi—原创 2017-08-13 11:04:58 · 3084 阅读 · 0 评论 -
Android代码片段整理(一)
从这篇文章开始,我将整理Android中常见的功能代码实现。这是该系列的第一篇文章。 这篇文章讲解的包括拨打电话、跳转至拨号界面、发送短信、判断当前设备是否为手机。一、拨打电话 /** * 拨打电话 * @param context 上下文对象 * @param phoneNumber 电话号码 */ public static void ca原创 2017-07-18 16:29:59 · 492 阅读 · 0 评论 -
Android运行时权限分析
一、前言: 首先,来讲一讲运行时权限。从Android 6.0开始,Google引入了运行时权限。Android中的权限分为两类:Normal Permission和Dangerous Permission。Normal Permission(即普通权限,一般不涉及到用户隐私),比如访问网络、手机震动等等;Dangerous Permission(一般涉及到用户隐私),比如读取sdcard、拨打电原创 2017-07-18 15:13:41 · 502 阅读 · 0 评论