2020.03.09-2020.03.13(主要方向传感器,动态权限,部分自定义view)

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)  重写其他事件的方法(滑动监听等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值