Solarex's Blog

我只想过,平平淡淡的生活,欲望啊,请放过脆弱的我

Kotlin是如何实现方法默认参数的

| Comments

学习Kotlin的时候,发现可以给方法设置默认参数,Java是不支持给方法设置默认参数的,那Kotin是如何实现的呢?不妨看下下面的kotlin文件,kotlin允许这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
class frob() {
    fun fred(x: Int = 300, y: frob = mkfrob(x)) {
        println("${this}${x}${y}")
    }
    fun mkfrob(x: Int): frob {
        return this;
    }
    fun boobar() {
        fred();
        fred(100);
        fred(100, frob());
    }
}

使用kotlinc编译成class文件之后,我们使用cfr反编译一下class文件看下编译器帮我们做了什么黑魔法。

自定义View总结三

| Comments

自定义View总结 – 触摸反馈

之前分析了Android触摸事件分发机制,在自定义View的时候进行触摸反馈,一般都是重写onTouchEvent,当然也有一些工具类可以使用,本文就对这些工具类进行总结,他们是ViewConfigurationScrollerOverScrollerVelocityTrackerGestureDetectorScaleGestureDetectorViewDragHelper

自定义View总结二

| Comments

自定义View总结 – 布局

布局基础

布局过程,就是程序在运行时利用布局文件中的代码来计算出实际尺寸和位置的过程。有两个阶段,测量阶段和布局阶段,分别对应measurelayout

对于一个View而言,默认的onMeasure实现是:

自定义View总结一

| Comments

自定义View总结 – 绘制

绘制基础

  • Canvas.drawColor(@ColorInt int color) 颜色填充
  • drawCircle(float centerX, float centerY, float radius, Paint paint) 画圆
  • Paint.setColor(int color),Paint.setStyle(Paint.Style style),Paint.setStrokeWidth(float width),Paint.setAntiAlias(boolean aa)
  • drawRect(float left, float top, float right, float bottom, Paint paint) 画矩形
  • drawPoint(float x, float y, Paint paint) 画点
  • drawPoints(float[] pts, int offset, int count, Paint paint) / drawPoints(float[] pts, Paint paint) 画点(批量)
  • drawOval(float left, float top, float right, float bottom, Paint paint)画椭圆
  • drawLine(float startX, float startY, float stopX, float stopY, Paint paint) 画线
  • drawLines(float[] pts, int offset, int count, Paint paint) / drawLines(float[] pts, Paint paint) 画线(批量)
  • drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) 画圆角矩形
  • drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint) 绘制弧形或扇形
  • drawPath(Path path, Paint paint) 画自定义图形
  • drawBitmap(Bitmap bitmap, float left, float top, Paint paint) 画 Bitmap
  • drawText(String text, float x, float y, Paint paint)绘制文字