Android_自定义View

2020-08-26  本文已影响0人  书虫大王X
1、继承关系:
2、view被绘制到viewGroup上面的流程:
3、自定义一个view:
 // Java代码中自定义view:
public class ykJView extends View {
//    使用代码创建控件
    public ykJView(Context context) {
        this(context,null);
    }
//    使用xml创建
    public ykJView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public ykJView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

// kotlin中自定义view:
//kotlin中如果一个类继承另外一个类并且父类中有多个构造方法就使用参数最多
// 的那个构造方法来构建父类
//然后提供参数比较少的那个几个构造方法作为次构造
open class ykView(context: Context,attrs: AttributeSet?,defStyleAttr:Int) : 
View(context,attrs,defStyleAttr) {
//    代码创建
    constructor(context: Context): this(context,null,0){

    }
//    xml创建
    constructor(context: Context,attrs: AttributeSet?): this(context,attrs,0){

    }
}

//  然后重写onMeasure(回调用两次)、onDraw(绘制类容)、
// dispatchDraw(绘制子视图)、onDrawForGround(绘制前景)等方法

// 
方法调用顺序
4、onDraw方法:

一、onDraw绘制内容的4个基础内容

二、 在onMeasure方法执行完成后,回调用onSizeChanged方法(控件在被创建时尺寸是-1和-1),所以可以通过此方法得到控件的尺寸

三、 当重写父类的方法时,如果父类空实现父类可以不调用super.method(),
如果父类有具体的实现,通常都是先调用super.method()然后再实现自己的

四、注意onDraw方法会被多次调用重复调用在这个方法里面尽量不要去创建对象

5、画笔设置颜色:
//  res.drawable.1.png图片对应的id
//  Bitmap就是具体图片―这个id对应的图片的真实数据
var a = BitmapFactory.decodeResource(resources,R.drawable.q)

        Paint().also {
//            it.color = Color.RED
//            it.color = Color.parseColor("#c0c0c0")
//            it.style = Paint.Style.STROKE
//            it.strokeWidth = 10f

//            着色器
//            参数:子类:有LinearGradient(线性渐变色)等
//            x0y0 渐变起始点
//            x1y1渐变重点
//            color0color1 渐变色
//            tile: 填充方式  CLAMP边缘色拉伸 REPEAT 重复 MIRROR 倒影
//            it.shader = LinearGradient(0f,0f,0f,mHeight.toFloat(),Color.GREEN,Color.MAGENTA,Shader.TileMode.CLAMP)

            var a = BitmapFactory.decodeResource(resources,R.drawable.b)
            it.shader = BitmapShader(a,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT)
        }
    }

一个自定义控件的小demo

上一篇下一篇

猜你喜欢

热点阅读