1.在github中可以中英文输入查找所需要的工具,项目,发现搜索的内容有较大的差异,并需把握好搜索的关键字。
2.反编译神器jadx去反编译没有加固的app,了解app的结构,了解大致所需的工具和包。
3.从GitHub上找的项目,可去gitee导入已有仓库,clone速度较快
4.方向传感器的使用:
-
基本方向(x,y,z轴):
X轴方向:沿屏幕水平方向从左到右,较短的边需要水平放置,较长 的边需垂直放置 Y轴方向:沿屏幕的垂直方向指向屏幕的顶端 Z轴方向:当水平放置时,指向天空方向
-
注册监听器:
SensorManager sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager? Sensor gyroSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_ORIENTATION) sensorManager?.registerListener(this, gyroSensor, SensorManager.SENSOR_DELAY_UI); //为传感器注册监听器
-
传感器的三个值:
公式:Math.abc(Sencsorevent.value[0/1/2]) Value[0]:方位角,手机绕着Z轴旋转的角度(可用制作指南针) Value[1]:倾斜角,手机翘起来的程度,当手机绕着x轴倾斜时该值会发生变化(测距) Value[2]:滚动角,沿着Y轴的滚动角度(测量角度)
-
注销监听器:
sensorManager?.unregisterListener(this)
5.动态申请权限(PermissionsDispatcher)
github地址:https://github.com/permissions-dispatcher/PermissionsDispatcher
-
添加依赖:
implementation "org.permissionsdispatcher:permissionsdispatcher:4.6.0" kapt "org.permissionsdispatcher:permissionsdispatcher-processor:4.6.0 需在最上面加入:apply plugin: 'kotlin-kapt'
-
危险权限:
-
注解:
@RuntimePermissions:注册Activity或Fragment处理权限(需要) @NeedsPermission:注释执行需要一个或多个权限的操作的方法(需要) @OnShowRationale:注释一个解释为什么需要权限的方法。它传入一个PermissionRequest对象,该对象可用于在用户输入时继续或中止当前的权限请求。(可省略) @OnPermissionDenied:注释如果用户未授予权限则调用的方法(可省略) @OnNeverAskAgain:注释一个方法,如果用户选择让设备“不再询问”权限,则调用该方法(可省略)
-
例子:
6.自定义view
步骤:
1) 自定义属性;
在/values/attr.xml文件中
常用类型:
1) string:字符串类型;
2)integer:整数类型;
3) float:浮点型;
4) dimension:尺寸,后面必须跟dp、dip、px、sp等单位;
5) Boolean:布尔值;
6) reference:引用类型,传入的是某一资源的ID,必须以“@”符号开头;
7) color:颜色,必须是“#”符号开头;
8) fraction:百分比,必须是“%”符号结尾;
9) enum:枚举类型
注:format中可以写多种类型,中间使用“|”符号分割开,表示这几种类型都可以传入这个属性;
获取自定义方法:
3) 选择和设置构造方法;
一般选择一、二、三个参数的构造方法
4) 重写onMeasure()方法;
onMeasure()方法中主要负责测量,决定控件本身或其子控件所占的宽高。
测量模式:
1) EXACTLY:当宽高值设置为具体值时使用,如100DIP、match_parent等,此时取出的size是精确的尺寸;
2) AT_MOST:当宽高值设置为wrap_content时使用,此时取出的size是控件最大可获得的空间;
3) UNSPECIFIED:当没有指定宽高值时使用(很少见)。
常用方法:
1) getChildCount():获取子View的数量;
2) getChildAt(i):获取第i个子控件;
3) subView.getLayoutParams().width/height:设置或获取子控件的宽或高;
4) measureChild(child, widthMeasureSpec, heightMeasureSpec):测量子View的宽高;
5) child.getMeasuredHeight/width():执行完measureChild()方法后就可以通过这种方式获取子View的宽高值;
6) getPaddingLeft/Right/Top/Bottom():获取控件的四周内边距;
7) setMeasuredDimension(width, height):重新设置控件的宽高。如果写了这句代码,就需要删除“super. onMeasure(widthMeasureSpec, heightMeasureSpec);”这行代码。
(上周学到这里)
4) 重写onDraw()方法;
5) 重写onLayout()方法;
6) 重写其他事件的方法(滑动监听等)。