- 博客(80)
- 资源 (7)
- 问答 (4)
- 收藏
- 关注
原创 Android事件传递(四):总结篇
下面源码基于Android11 API30文章里会用到上篇文章的布局例子这里先做一个初始化 ,让他们都返回默认值 重写方法dispatchTouchEvent 重写onTouchEvent isClickable MyLinearLayoutOut return super.dispatchTouchEvent(ev); return super.onTouchEvent(event); MyLinearLayout return super...
2021-03-23 16:41:50
322
1
原创 Android事件传递(三):你真的知道 UP 在Activity、View、ViewGroup中怎么传递的么?
上一篇:Android事件传递(二):事件动作 DOWN 在Activity、View、ViewGroup传递下面源码基于Android11 API30上一篇文章分析了DOWN事件以后布局中每个对象的状态:UP动作也是和DOWN一样从Activty开始到ViewGroup的dispatchTouchEvent方法,我们就从这里开始看,我们先分析 DecorView :DecorView extends ... extends ViewGroup: @Overri
2021-03-23 15:31:45
624
1
原创 Android事件传递(二):DOWN 在Activity、View、ViewGroup传递,除了自己本身的传递,还做了什么?
下面源码基于Android11 API301 Activity#dispatchTouchEvent public class Activity extends ContextThemeWrapper implements Window.Callback,...... { ......省略其它代码...... private Window mWindow; public Window getWindow() { r
2021-03-23 14:16:50
774
2
原创 Android事件传递(一):Activity、View、ViewGroup及dispatchtouchEvent、onTouchEvent梳理
1 事件的组成用户对屏幕的操作主要包括下面几种操作 ,它们都是MotionEvent类中定义的常量ACTION_DOWN = 0 按下(手机开始点到屏幕上) ACTION_UP = 1 抬起(手机离开屏幕上) ACTION_MOVE = 2 移动(手机在屏幕上滑动) ACTION_CANCEL = 3 取消 像点击一个按钮整个事件就是ACTION_DOWN ----> ACTION_UP...
2021-03-16 16:13:26
825
原创 Android事件分析前篇
偶尔看到一个问答:https://ask.youkuaiyun.com/questions/246798,为什么onTouchEvent方法会在dispatchTouchEvent方法之前执行呢?就跟了一下源码重新看了一下Android的事件传递流程回答如下: public class MyButton extends Button { 。。。。。省略代码。。。。。。 @Override public boolean dispatchTouchEvent(MotionEvent
2021-03-05 14:34:33
174
原创 子线程也能更新UI?
在写一个小项目的时候遇到一个很奇怪的问题,在子线程里面有两个更新UI操作,但是前面一个不报错,后面一个报错了。我确实没有乱说,代码(完整代码,后面log对应行数都是准的)如下:package com.demo.text_demo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;impo.
2021-03-04 10:31:59
562
2
原创 LayoutInflater加载xml布局源码分析及View的mParent的初始化
上一篇文章: setContentView源码分析在上一篇文章到最后加载我们自己的xml布局文件到父布局中:LayoutInflater.from(this.mContext).inflate(resId, contentParent);那么LayoutInflater是如何加载xml布局文件的呢?目录1. LayoutInflater.from(Context)2. inflate(resId, contentParent)3. 附1. LayoutInflater.from(Cont
2021-02-04 16:25:00
398
1
原创 setContentView源码分析
public class ActivityTest extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); }} ↓ ...
2021-01-27 14:33:21
1508
4
原创 AndroidStudio AIDL 详细步骤
AIDL (Android Interface Definition Language)即Android接口定义语言。最近在看Binder的原理,Android里面AIDL就是Binder的经典实现,先记录一下AIDL的使用步骤。1 服务端Service1.1 使用AndroidStudio创建aidl文件然后弹出一个让你修改文件名的页面,文件名自己随便取点Finish以后aidl文件目录如下图:然后打开aidl文件夹目录并打开刚刚创建的 OperateNumInterf
2020-12-14 16:53:42
6149
1
原创 Kotlin break continue 一看就懂
break1 双层循环break外层循环loopOne@ for (i in 1..10) { println("i ${i}") for (j in 1..10) { if (i == 2 && j == 8) break@loopOne print("j ${j} ") } println() }输出日志如下:2.
2020-11-25 10:17:46
1526
原创 AndroidStudio 打包apk 报错Error:Execution failed for task ‘:app:packageRelease‘
签名打包apk的时候报错Error:Execution failed for task ':app:packageRelease',如下图各种clean,重启Studio,并没有什么卵用。期间还报了各种其他错误如下:Cause: invalid block typeCause: invalid distance too far backEntry 'res/drawable-xxhdpi-v4/loading_16.png' name differFailed to create..
2020-11-23 09:10:52
7555
2
原创 非Activity环境startActivity什么意思?Calling startActivity() from outside of an Activity
什么是非Activity环境startActivity?在Activity里面可以直接startActivity,如果不在Activity里面就需要用 context.startActivity 的方式。那是不是用context.startActivity的方式就是非Activity环境startActivity呢?答案是不一定。如果context是Activty, context.startActivity是Activity环境startActivity;如果context不是Act.
2020-10-29 10:04:02
353
原创 微信下载文件目录
微信发送apk文件会默认加一个.1后缀,虽然手机下载QQ浏览器能直接安装,但是,并不想下。打算直接打开微信文件保存目录修改文件名去掉 .1 然后就可以安装了。网上说微信目录是这样的:/tencent/MicroMsg/Download手机文件管理 → tencent → MicroMsg →Download但是我打开MicroMsg发现没有Download文件夹。。。。然后我在另一个目录中找到了:手机文件管理 → Android → data → com.tencent.mm→Mi.
2020-10-27 17:05:13
11151
原创 怎么在AndroidManifest的Application中使用多个tools:replace
因为项目中需要用到多个tools:replace,用法如下 <application .....。 android:allowBackup="false" android:appComponentFactory="AAA" tools:replace="android:appComponentFactory,android:allowBackup">就是在 tools:replace 后面用逗号隔开就可以了...
2020-10-26 14:00:57
2588
原创 AndroidStudio 3.6.3 R.layout. 找不到布局文件
版本:AndroidStudio 3.6.3在确认R文件没有导错的情况下,试了File–>Sync with File System 还是不行。重启AndroidStudio就可以了。
2020-10-15 16:12:03
1060
原创 AndroidStudio升级以后 间接依赖报错问题 implementation project 和 api project
使用AndroidStudio3.0以上版本进行组件式开发发现间接依赖的库报错找不到对应的Library我的项目是这样的|--moduleA|--moduleB|--moduleC1 在moduleB的build.gradle文件中依赖moduleA:implementation project(path: ':moduleA')2 在moduleC的build.gradle文件中依赖moduleB:implementation project(path: '...
2020-10-13 13:49:42
10952
原创 免费 在线转换 音频,图像,PDF,视频,文档等格式转换
地址点这里: https://www.aconvert.com/cn/audio/可以在线免费转换音频,图像,PDF,视频,文档格式页面是这样的1 点击 选择文件 选择想要转换的文件。2 点击目标格式 选择你想要的格式3 点击 开始转换 开始上传文件并转换我是将一个m4a的音频文件转换成MP3格式,转换后下载页面:如果你的浏览器不知道怎么新建下载方式1:那就用手机浏览器扫描下面的那个二维码,华为自带浏览器页面如下:点击那个下载按钮就直接下载。用手机UC..
2020-09-15 10:21:19
10813
原创 Kotlin Lambda详解及非局部返回是啥意思?
lambda 表达式总是括在花括号中, 完整语法形式的参数声明放在花括号内,并有可选的类型标注, 函数体跟在一个->符号之后。如果推断出的该 lambda 的返回类型不是Unit,那么该 lambda 主体中的最后一个(或可能是单个) 表达式会视为返回值。意思就是说lambda表达式一定要放在花括号 { } 中,->前面是参数,后面是方法体就是你要拿这个参数进行的操作。如果你的lambda是有返回值的,->后面最后一个表达式会被视为返回值,代码如下:lam1 对...
2020-09-10 16:34:45
1326
2
原创 Kotlin 对象声明与对象表达式
先来看一下对象表达式和对象声明是如何实现的 /** /** * 对象表达式 * 对象声明 */ */ var obj = object { object MyObject {.
2020-08-31 14:06:57
461
原创 Duplicate jar entry [android/support/design/widget/CoordinatorLayout$1.class
Duplicate jar entry [android/support/design/widget/CoordinatorLayout$1.class
2020-08-26 11:29:13
857
原创 Android版本对照
平台版本API 级别VERSION_CODEAndroid 10.029QAndroid 928PieAndroid 8.127OreoAndroid 826OreoAndroid 7.125NougatAndroid 7.024NougatAndroid 6.023MarshmallowAndroid 5.122LOLLIPOP_MR1Android 5.021LOLLIPOPAndroid ...
2020-08-26 10:36:06
3805
原创 RxJava2 源码分析笔记(三) 线程切换
终于来到线程切换先看一个如何切线程的简略流程图注: 上面蓝牙主流程中 subscribeOn(Schedulers.io()) ,observeOn(AndroidSchedulers.mainThread()) 但是subscribeOn 也可以传AndroidSchedulers.mainThread();observeOn也可以传Schedulers.io() 这是让RxJava的线程可以来回切换的关键!...
2020-08-18 11:23:17
766
原创 RxJava2 源码分析笔记(二)
上一篇文章: RxJava2 源码分析笔记(一)下面来看一个复杂一点的调用是如何工作的 AStudent aStudent = new AStudent();//我自己建的类 aStudent.setName(" dog "); Observable .just(aStudent) .map(new
2020-08-13 16:54:15
353
原创 RxJava2 源码分析笔记(一)
先看一个最简单的调用Observable.create(new ObservableOnSubscribe<Object>() { @Override public void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Exception { System.out.println(" 被观察者 subscribe ");
2020-08-12 13:58:32
222
原创 rx.xxx 和 io.reactivex.xxx RxJava1 和 RxJava2 和 RxJava3
描述 RxJava 1.X RxJava 2.X package包名 rx.xxx io.reactivex.xxx Reactive Streams规范 1.X早于Reactive Streams规范出现,仅部分支持规范 完全支持 Backpressure 背压 对背压的支持不完善 Observable设计为不支持背压 新增Flowable支持背压 null空值 支持 不再支持null值,传入null值会抛出NullPoi.
2020-08-12 08:59:18
1915
原创 Kotlin 泛型 协变out 和 逆变 in 及Java中extends和super的对比
List<? extends TextView> textViews = new ArrayList<TextView>(); TextView textView = textViews.get(0); //确定可以获取到TextView(根据多态是其子类也会向上转型,所以可以) textViews.add(new Button(this)); //报错 textViews.add(new Vi...
2020-07-15 10:08:17
1688
原创 AccessibilityService 类似微信自动抢红包的实现
类似微信抢红包也就是自动点击按钮实现1 创建一个类继承AccessibilityServicepublic class AutoClickService extends AccessibilityService { @Override public void onCreate() { super.onCreate(); } @Override protected void onServiceConnected() {
2020-07-07 15:03:24
760
原创 Kotlin 主构造函数与次构造函数的理解
遇到了Kotlin: Primary constructor call expected的报错如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用this关键字即可这句话就是说如果一个类有主构造函数,只要他还有次构造函数就必须调用主构造函数,方式可以不同方式1:每个次构造函数都调用主构造函数class Parent(name: String) { var age = 0; va...
2020-06-04 15:21:23
4972
7
原创 Kotlin 双冒号 :: 将函数作为参数使用及使用函数作为参数的三种方式
class ColonMagic { /** * 不需要参数 */ private fun sayNoWords() { println(" no msg ") } /** * 一个参数 * message:String类型 */ private fun say(message: String) { println(message) } /** *.
2020-06-02 14:48:58
1324
2
原创 Flutter Dart 引用方法 带括号 和 不带括号的比较
通过代码比较一下class Person { bool say(String msg) { print(msg); return msg == null ? false : true; } void setPeople() { /** * People.setSay1 参数需要是一个bool值 * say("im people")带括号就是返回一个bool值 * 所以问题 * */ new People.s
2020-05-13 16:21:16
2225
2
原创 Dart笔记
1 Dart中类 中无论函数还是方法都不支持重载,方法名一样,参数不同会报错。class A{ A(){ } A(int a){ //这个地方会报错,说A()函数已经存在 } A.eat(){ //构造函数 } A.sing(int food){ //构造函数 } A.sleep(){ //构造函数 }}2 Getter 和 Stter 方法class D{ int num1,num2...
2020-05-11 15:54:21
309
原创 VisualStudioCode VSD 集成Dart 采坑记录
1代码不联想VSD配置Dart都成功以后,代码不联想有一个警告:For full Dart language support, please open a folder containing your Dart files instead of individual loose files好吧,原来是直接新建一个 .dart 文件进行编辑不支持,需要新建一个文件夹,再在里面新建 .dart文件就可以了就是打开随便哪个盘,新建一个文件夹,用VSD打开,再新建 .dart文件就可以了...
2020-05-11 09:32:42
1647
原创 Android MVP框架 小结
公司项目中用了MVP框架,这里进行一点总结,详细说明都在代码注释里面项目中我喜欢按功能进行处理先展示base包中的处理 BaseActivitypublic class BaseActivity extends AppCompatActivity { /** * 1 进行一些Activity的公共处理 * 2 对Activity的批量管理操作...
2020-04-23 13:12:56
253
原创 AndroidStudio logcat 日志 包名显示问号 亲测!!!
04-20 13:37:28.576 18277-18277/? I/ly: msg: 初始化定位AndroidStudio突然出现日志里面的包名显示为问号,原来一直是好的网上的办法全都是:检查 Tools / Android / Enable ADB Integration是否勾上,没有的话,勾上,然后,重启adb我打开看了一下,我的Enable ADB Integration...
2020-04-20 13:46:39
1013
原创 蓝牙搜索不到周围其他蓝牙设备
最近公司需要做一个小项目,用到蓝牙,首先在Mainfest清单中声明蓝牙权限和定位权限 <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /&g...
2020-04-14 16:00:22
983
原创 视频格式转换网站
地址1:https://www.aconvert.com/cn/video/地址2:https://convertio.co/zh/mp4-mpg/地址3:https://cloudconvert.com/formats/#video
2019-11-11 16:13:33
8003
原创 is not accessible from java.lang.Class android.app.ActivityThread
最近遇到一个报错is not accessible from java.lang.Class<android.app.ActivityThread>很奇怪最后发现相关的类的一个构造函数 是protected 改为public 即可构造函数无论是protected 还是 private 都是不行的会报这个错误...
2019-10-23 15:41:38
5516
1
原创 图片PDF转word
最近需要把PDF转word,试了几个网站发现PDF是图片做成的而不是文本直接做的。找了些国内的软件都要收费。直接放网站:https://www.onlineocr.net/限制:只有50页的免费权限使用:1 点右上角SIGN UP 去注册一个账号,注册很简单2 注册账号,填邮箱但不用登陆邮箱验证,所以随便填个邮箱就可以,但要是正确的邮箱格式3 登录以后就按...
2019-06-01 09:52:09
3564
原创 Android setLineSpacing(float add, float mult);
setLineSpacing()原型为public void setLineSpacing(float add, float mult); 参数add:增加的间距数值,对应android:lineSpacingExtra参数。 参数mult:增加的间距倍数,对应android:lineSpacingMultiplier参数。最终结果:原行间距 x mult+add tv.setLine...
2018-08-27 14:11:10
9697
Scource Insight4.00.0084
2020-12-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人