日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、自定義 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?) {}} 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Kotlin】Kotlin 自定义组件 ( 自定义 View | 自定义 SurfaceView )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。