最近在看刘望舒的《android进阶之光》,顺便对书中内容做一些笔记和补充
3.1 View&ViewGroup
3.2 坐标系
- android坐标系
- view坐标系
- view获取自身的宽和高
- view自身的坐标
- MotionEvent提供的方法
getX(),getY(),getRawX(),getRawY()
- 事件类型:motionevent对象代表的动作
按下:ACTION_DOWN,滑动:ACTION_MOVE,离开:ACTION_UP
3.3view的滑动
原理:
记录触摸点以及移动点的坐标并算出偏移量
方法:
layout(),offsetLeftAndRight(),offsetTopAndBottom(),LayoutParams(),动画,scrollTo与scrollBy
- layout() p.s 顺便学习下kotlin
class CustomView : View {
private var lastX: Int = 0
private var lastY: Int = 0
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
//一定要重写view的三个构造函数
override fun onTouchEvent(event: MotionEvent): Boolean {
val x = event.x.toInt()
val y = event.y.toInt()
when (event.action) {
MotionEvent.ACTION_DOWN -> {
lastX = x
lastY = y
}
MotionEvent.ACTION_MOVE -> {
val offsetX = x - lastX
val offsetY = y - lastY
layout(left + offsetX, top + offsetY, right + offsetX, bottom + offsetY)
}
}
return true
}
}
- offsetLeftAndRight()&offsetTopAndBottom()
把ACTION.MOVE中偏移的代码换成
offsetLeftAndRight(offsetX)
offsetTopAndBottom(offsetY)
- LayoutParams(改变布局参数)
- Animation
建议使用属性动画,否则动画不能改变控件的位移参数 - scrollTo&scrollBy
网友评论