文章目录

  • 一、自定义 View 组件 ( Kotlin )
  • 二、自定义 SurfaceView 组件 ( Kotlin )

自定义组件构造函数统一在 constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) 构造函数中实现 , 在 constructor(context: Context?) , constructor(context: Context?, attrs: AttributeSet?) 构造函数中 , 都基于三个参数的构造函数 ;

一、自定义 View 组件 ( Kotlin )


package kim.hsl.aa.viewimport android.content.Context
import android.graphics.Canvas
import android.os.Build
import android.util.AttributeSet
import android.view.View
import androidx.annotation.RequiresApiclass MyView : View {val TAG: String = "MyView"constructor(context: Context?) : this(context, null, 0)constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)@RequiresApi(Build.VERSION_CODES.LOLLIPOP)constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)// 绘制核心方法}
}

二、自定义 SurfaceView 组件 ( Kotlin )


package kim.hsl.aa.viewimport android.content.Context
import android.graphics.*
import android.os.Build
import android.util.AttributeSet
import android.view.SurfaceHolder
import android.view.SurfaceView
import androidx.annotation.RequiresApi
import kim.hsl.aa.Rclass MySurfaceView : SurfaceView, SurfaceHolder.Callback, Runnable {val TAG = "MySurfaceView"/*** 渲染绘制标志*/private var mDrawingFlag = false/*** 渲染线程*/private var mRender: Thread? = null/*** 画布*/private var mCanvas: Canvas? = nullconstructor(context: Context) : this(context, null, 0)constructor(context: Context, attrs : AttributeSet?) : this(context, attrs, 0)constructor(context: Context, attrs: AttributeSet?, defStyleAttr : Int) :super(context, attrs, defStyleAttr) {holder.addCallback(this)setZOrderOnTop(true)holder.setFormat(PixelFormat.TRANSLUCENT)}@RequiresApi(Build.VERSION_CODES.LOLLIPOP)constructor(context: Context, attrs: AttributeSet, defStyleAttr : Int, defStyleRes: Int) :super(context, attrs, defStyleAttr, defStyleRes)override fun run() {val paint = Paint()while (mDrawingFlag) {paint.setColor(Color.WHITE)mCanvas = holder.lockCanvas()if (mCanvas == null) continuemCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)//TODO 绘制逻辑holder.unlockCanvasAndPost(mCanvas)Thread.sleep(20)}}/*下面的三个函数是 实现 SurfaceHolder.Callback 接口方法*/override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {mDrawingFlag = truemRender = Thread(this)mRender?.start()// 加载图片var bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)}override fun surfaceDestroyed(holder: SurfaceHolder?) {}override fun surfaceCreated(holder: SurfaceHolder?) {}}

【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )相关推荐

  1. html5自定义组件样式,Taro 自定义组件样式不生效及解决方案

    一.问题 页面功能太多,想分成多个自定义组件,结果发现自定义组件样式不生效. 二.解决办法(推荐第二种) 第一种:利用 externalClasses 定义段定义若干个外部样式类实现(不推荐,写法累赘 ...

  2. 自定义组件开发六 自定义组件

    概述 Android SDK 为我们提供了一套完整的组件库,数量多.功能强,涉及到方方面面,但是,我们依然看到软件市场上的每个 App 都有自己独特的东西,绝不是千遍一律的,而且也会和 IOS相互借鉴 ...

  3. 自定义组件开发七 自定义容器

    概述 自定义容器本质上也是一个组件,常见的 LinearLayout.FrameLayout.GridLayout.ScrollView和 RelativeLayout 等等组件都是容器,容器除了有自 ...

  4. vue自定义组件html,Vue自定义组件(简单实现一个自定义组件)

    在用vue构建项目的过程中,我们有时会用到别人开发的组件如vue-router:使用他人组件的正常步骤如下: 1.命令行进行安装,执行install: 2.在vue项目中的入口文件main.js中,进 ...

  5. Vue如何自定义组件?超详细Vue自定义组件指南!使用自定义组件减少重复造轮子! ∠( °ω°)/ 前端知识

    文章目录 使用意义 基础使用 给组件添加属性 传递事件 自定义组件的v-model 剖析v-model原理 使用示例 插槽 使用意义 有时候一组HTML代码可能会在多出使用(比如页眉页脚).如果我们把 ...

  6. java swing自定义组件_JAVA Swing自定义JScorllPanel

    JAVA Swing中JScrollPanle自定义带标尺的JScrollPanel Swing中JScrollPanel的结构与组成如下图: 分为四个角与四个边,中间蓝色矩形为View窗口,可以通过 ...

  7. android 自定义 seekbar,Android View 自定义 RangeSeekBar 范围选择器

    前段时间群里兄弟项目中有类似这样的需求 我看到兄弟受苦受难,于心不忍.又因事不关己,打算高高挂起.正在爱恨纠结之时,日神对我说:没事多造点轮子,你的人生会有很多收获.这波鸡汤让我深受触动,于是决定拯救 ...

  8. 微信小程序自定义组件之Picker组件

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 需求: 通过JS条件判断,满足条件就弹出Picker给用户选择一个数组里面的数据. 有些朋友可能会有疑问: 1 ...

  9. 微信小程序自定义组件,提示组件

    微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加"components"目录,然后像添加Page ...

  10. 微信小程序开发学习5(自定义组件)

    微信小程序开发学习5(自定义组件) 1.学习目标 能够知道如何自定义小程序组件 能够知道小程序组件中behaviors的作用 能够知道如何安装和配置vant-weapp组件库 能够知道如何使用MobX ...

最新文章

  1. 每日一皮:这是个有趣的妹子...
  2. 北航计算机学院毕业生2019,北航2019届本科生毕业典礼暨学位授予仪式举行
  3. python server.py_python manage.py runserver报错
  4. php5.5 连接数据库,php5.5 session_set_save_handler 连接数据库问题
  5. linux sar 历史负载,查看负载、vmstat、top、sar以及nload命令
  6. JavaWeb笔记:JDBC总结
  7. android自定义textview销毁,Android自定义View去除TextView的Padding值
  8. D3 transtion
  9. python 列表推导_Python 列表推导式使用的注意事项
  10. eclipse中文语言包安装
  11. 数据库索引类型介绍及其优缺点、区别、适用场景
  12. Android动画之属性动画
  13. 网件 无线打印机服务器,NETGEAR Genie让普通打印机实现Air print功能
  14. 球面坐标系转换为笛卡尔坐标系
  15. 3日线与5日线金叉买入法
  16. android 即时通讯技术,基于Android即时通讯系统的设计与实现
  17. java压_JAVA背压
  18. 网站前端联系我们之点击自动打开qq/Tim对话窗口
  19. Vue 使用特殊字体
  20. 小鱼发现玩机械臂的小姐姐越来越多了。。。再说说手眼标定那些事~

热门文章

  1. [zz]Spring MVC 之 SimpleFormController类別
  2. mysql 5.0 to mysql 5.1的BTREE索引问题
  3. 29_Java_数据库_第29天(JDBC、DBUtils)_讲义
  4. Linux下rz/sz安装及使用方法
  5. 用openoffice+jodconverter+webuploader+pdf.js实现文件上传、在线预览功能
  6. Mysql 查看、创建、更改 数据库和表
  7. [开源].NET数据库访问框架Chloe.ORM
  8. 不允许所请求的注册表访问权
  9. Silverlight入门系列]使用MVVM模式
  10. leetcode 293.Flip Game(lintcode 914) 、294.Flip Game II(lintcode 913)