View体系与自定义View--书摘(一)

最近在看刘望舒的《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

你可能感兴趣的:(View体系与自定义View--书摘(一))