美文网首页
Android_自定义View

Android_自定义View

作者: 书虫大王X | 来源:发表于2020-08-26 19:16 被阅读0次
1、继承关系:
  • View:单个视图,其上不能添加视图控件,可以和用户进行交互、进行界面渲染,是所有控件的基类,都是矩形的
  • ViewGroup:继承与View,可以将它理解为一个容器,它可以承载单个或多个子视图,所有的布局方式都直接继承与它(Linelayout、Relativelayout)
  • ViewRootImpl: 是视图的顶层,实现了视图和窗口之间交互的协议
2、view被绘制到viewGroup上面的流程:
  • 单个控件自身的绘制流程: onMeasure:测量自身尺寸、onDraw:绘制
  • 容器的绘制流程:onMeasure:测量自身尺寸、onLayout:定义子控件布局、onDraw:绘制(多数不需要用到此方法)
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个基础内容

  • Bitmap图片
  • Canvas 绘制类(画板)绘制类提供各种绘制的方法
  • Paint 画笔:笔的粗细颜色
  • Path路径 :画的类容

二、 在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

相关文章

  • Android_自定义View

    1、继承关系: View:单个视图,其上不能添加视图控件,可以和用户进行交互、进行界面渲染,是所有控件的基类,都是...

  • Android View(转)

    自定义View的原理自定义View基础 - 最易懂的自定义View原理系列自定义View Measure过程 - ...

  • 自定义View系列

    自定义View1---知识储备自定义View2---View Measure过程自定义View3---View L...

  • 自定义View5---完整的自定义View

    移步自定义View系列 1.自定义view的分类自定义单一view(不含子view)继承view继承特定view如...

  • 自定义View

    自定义View系列文章 自定义View view向上滚动

  • 自定义View(一) 自定义View的概述

    不怕跌倒,所以飞翔 自定义View概述 1.自定义View分类 自定义View 直接继承View主要是绘制 自定义...

  • Android自定义View

    Android自定义View 参考:从此再有不愁自定义View——Android自定义view详解android ...

  • Android_自定义View_圆角头像

    效果图如下 原图如下 实现方法: 自定义View 代码如下(可直接Copy适用) 使用自定义View: 布局页面中...

  • 自定义view

    Android自定义View 为什么要自定义View自定义View的基本方法 自定义View的最基本的三个方法分别...

  • Android 之 自定义View全解

    本文主要有以下内容: 自定义View的分类 自定义View的注意事项 自定义View的不同实现 自定义View使其...

网友评论

      本文标题:Android_自定义View

      本文链接:https://www.haomeiwen.com/subject/qactsktx.html