欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?中TextureView和SurfaceView的屬性方法及示例說明

 更新時間:2022年06月22日 10:35:47   作者:??芝麻粒兒????  
這篇文章主要介紹了Android?中TextureView和SurfaceView的屬性方法及示例說明,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

實踐過程

SurfaceView屬性和方法

  • surfaceCreated(@NonNull SurfaceHolder holder):surface創(chuàng)建時回調(diào)
  • surfaceDestroyed(@NonNull SurfaceHolder holder):surface銷毀時回調(diào)
  • surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height):surface發(fā)生變化時回調(diào)
  • SurfaceHolder.addCallback(context):添加回調(diào),也就是上面三個方法
  • lockCanvas():獲取Canvas對象并鎖定畫布,調(diào)用Canvas進行繪圖,和unlockCanvasAndPost是依次成對出現(xiàn)。
  • unlockCanvasAndPost():結束鎖定畫布,并且提交改變。和lockCanvas是依次成對出現(xiàn)。

TextureView屬性和方法

  • getSurfaceTexture():此方法返回此視圖使用的 SurfaceTexture。
  • getBitmap(整型寬度,整型高度):此方法返回返回關聯(lián)表面紋理內(nèi)容的位圖表示形式。
  • getTransform(Matrix transform):此方法返回與此紋理視圖關聯(lián)的轉換。
  • isOpaque():此方法指示此視圖是否不透明。
  • lockCanvas():此方法開始編輯曲面中的像素。
  • setOpaque(boolean opaque):此方法指示此紋理視圖的內(nèi)容是否不透明。
  • setTransform(Matrix transform):此方法將轉換設置為與此紋理視圖關聯(lián)。
  • unlockCanvasAndPost(Canvas canvas):此方法完成對曲面中像素的編輯。
  • onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1, int arg2):創(chuàng)建的監(jiān)聽,前提開啟硬件加速
  • onSurfaceTextureDestroyed(SurfaceTexture arg0):銷毀的監(jiān)聽
  • onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1,int arg2):變化的監(jiān)聽
  • onSurfaceTextureUpdated(SurfaceTexture arg0):更新的監(jiān)聽

TextureView示例

public class MainActivity extends Activity implements SurfaceTextureListener{
??? private Camera mCamera;
??? private TextureView [mTextureView]();
??? protected void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? mTextureView = new TextureView(this);
??????? mTextureView.setSurfaceTextureListener(this);
??????? setContentView(mTextureView);
??? }

??? public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
??????? mCamera = Camera.open();
??????? try {
??????????? mCamera.setPreviewTexture(surface);
??????????? mCamera.startPreview();
????????????//可以修改透明度和旋轉方向
            mTextureView.setAlpha(1.0f);
            mTextureView.setRotation(90.0f);
??????? } catch (IOException ioe) {
??????????? // 異常處理
??????? }
??? }
??? public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
??? }
??? public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
??????? mCamera.stopPreview();
??????? mCamera.release();
??????? return true;
??? }
?? ?public void onSurfaceTextureUpdated(SurfaceTexture surface) {
??? }
}

SurfaceView示例

Java版本自定義

public class ECGSurfaceViewJava extends SurfaceView implements SurfaceHolder.Callback {
??? //簡單模擬一下數(shù)據(jù)
??? public List<Integer> ecgDatas = new ArrayList<>();
??? //矩陣? 畫布 畫筆 顏色
??? private Rect rect;
??? private Canvas mCanvas;
??? private Paint mPaint;? //畫波形的畫筆
??? private String line_color = "#01FC00";? //畫筆默認是綠色的
??? private int wave_speed = 30;//定義波速:30mm/s
??? private int sleepTime = 8;//每次鎖屏的時間間距,單位ms 連線的時間長度,,如果大則會卡頓效果
??? private SurfaceHolder surfaceHolder;
??? private boolean isCanRun = true;
??? private int mStartX = 0;
??? private int mStartY = 0;
??? private Runnable drawRunnable = new Runnable() {
??????? @Override
??????? public void run() {
??????????? while (isCanRun) {
?????????????? //在這獲取改view的寬度? 如果mStartX超過則歸位 這樣實現(xiàn)反復從頭畫,我這800只是簡單表示下效果
??????????????? if (mStartX > 800) {
??????????????????? mStartX = 0;
??????????????? }
??????????????? //繪制區(qū)域不斷向右變化
??????????????? rect.set(mStartX, 0, mStartX + 16, 300);
????????? ??????mCanvas = surfaceHolder.lockCanvas(rect);? //提交繪制區(qū)域
??????????????? if (mCanvas == null) return;
??????????????? //很重要,如果反復從頭繪制,會覆蓋上一次的繪制
??????????????? mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
??????????????? if (ecgDatas.size() > 0) {
??????????????????? mCanvas.drawLine(mStartX, mStartY, mStartX + 16, ecgDatas.get(0), mPaint);
??????????????????? //這個點的重點是下一個點的起點
??????????????????? mStartX = mStartX + 16;
??????????????????? mStartY = ecgDatas.get(0);
??????????????????? ecgDatas.remove(0);
??????????????? } else {
??????????????????? initData();
??????????????? }
??????????????? surfaceHolder.unlockCanvasAndPost(mCanvas);??? //這種方式把上次繪制的遮蓋了 因此出現(xiàn)了斷點
??????????? }
??????? }
??? };
??? public ECGSurfaceViewJava(Context context, AttributeSet attrs) {
??????? super(context, attrs);
??????? this.surfaceHolder = this.getHolder();//獲取holder
??????? this.surfaceHolder.addCallback(this);
??????? rect = new Rect();? //繪制矩陣內(nèi)
??????? mPaint = new Paint();
??????? mPaint.setColor(Color.parseColor(line_color));?? //畫筆顏色
??????? mPaint.setAntiAlias(true);?? //抗鋸齒
??????? mPaint.setStrokeWidth(2);
??????? initData();
??? }
??? private void initData() {
??????? ecgDatas.clear();
??????? for (int i = 0; i < 200; i++) {
??????????? ecgDatas.add((int) (Math.random() * 200));
??????? }
??????? mStartY = ecgDatas.get(0);
??? }
??? @Override
??? public void surfaceCreated(SurfaceHolder holder) {
??????? new Thread(drawRunnable).start();
??? }
??? @Override
??? public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
??? }
??? @Override
??? public void surfaceDestroyed(SurfaceHolder holder) {
??????? isCanRun = false;
??? }
}

Kotlin版本自定義

class ECGSurfaceViewKotlin(context: Context?, attrs: AttributeSet?) : SurfaceView(context, attrs), SurfaceHolder.Callback {
??? //簡單模擬一下數(shù)據(jù)
??? var ecgDatas: MutableList<Int> = ArrayList()
??? //矩陣? 畫布 畫筆 顏色
??? private var rect: Rect? = null
??? private var mCanvas: Canvas? = null
??? //畫波形的畫筆
??? private var mPaint: Paint? = null
??? private val line_color = "#01FC00" //畫筆默認是綠色的
??? private val wave_speed = 30 //定義波速:30mm/s
??? private val sleepTime = 8 //每次鎖屏的時間間距,單位ms 連線的時間長度,,如果大則會卡頓效果
??? var surfaceHolder: SurfaceHolder? = null
??? private var isCanRun = true
??? private var mStartX = 0
??? private var mStartY = 0
?
??? private val drawRunnable = Runnable {
??????? while (isCanRun) {
?????????? //在這獲取改view的寬度? 如果mStartX超過則歸位 這樣實現(xiàn)反復從頭畫,我這800只是簡單表示下效果
??????????? if (mStartX > 800) {
??????????????? mStartX = 0
??????????? }
??????????? //繪制區(qū)域不斷向右變化
??????????? rect!![mStartX, 0, mStartX + 16] = 300
??????????? mCanvas = surfaceHolder!!.lockCanvas(rect) //提交繪制區(qū)域
??????????? if (mCanvas == null) return@Runnable
??????????? //很重要,如果反復從頭繪制,會覆蓋上一次的繪制
??????????? mCanvas!!.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
??????????? if (ecgDatas.size > 0) {
??????????????? mCanvas!!.drawLine(mStartX.toFloat(), mStartY.toFloat(), (mStartX + 16).toFloat(), ecgDatas[0].toFloat(), mPaint)
??????????????? //這個點的重點是下一個點的起點
??????????????? mStartX = mStartX + 16
??????????????? mStartY = ecgDatas[0]
??????????????? ecgDatas.removeAt(0)
??????????? } else {
??????????????? initData()
??????????? }
??????????? surfaceHolder!!.unlockCanvasAndPost(mCanvas!!) //這種方式把上次繪制的遮蓋了 因此出現(xiàn)了斷點
??????? }
??? }
??? init {
??????? surfaceHolder = this.holder //獲取holder
??????? surfaceHolder!!.addCallback(this)
??????? rect = Rect() //繪制矩陣內(nèi)
??????? mPaint = Paint()
??????? mPaint!!.setColor(Color.parseColor(line_color)) //畫筆顏色
??????? mPaint!!.setAntiAlias(true) //抗鋸齒
?????? ?mPaint!!.setStrokeWidth(2f)
??????? initData()
??? }
??? private fun initData() {
??????? ecgDatas.clear()
??????? for (i in 0..199) {
??????????? ecgDatas.add((Math.random() * 200).toInt())
??????? }
??????? mStartY = ecgDatas[0]
??? }
??? override fun surfaceCreated(holder: SurfaceHolder?) {
??????? Thread(drawRunnable).start()
??? }

??? override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
??? }
??? override fun surfaceDestroyed(holder: SurfaceHolder?) {
?????? ?isCanRun = false
??? }
}

布局直接使用即可:

<cn.appstudy.customView.ECGSurfaceViewJava
??????? android:layout_width="match_parent"
??????? android:layout_height="200dp"/>
?
<cn.appstudy.customView.ECGSurfaceViewKotlin
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_marginTop="220dp" />

上面小空只是簡單寫了下示例,如果是畫心電圖其實還有更多的邏輯,比如多個心電圖同步,比如超出屏幕后回到起始位置,比如實時更新心電圖數(shù)據(jù),再比如心電圖速度控制等等。

而且上面心電圖示例是從左到右的,還有可能從上到下,從右到左的等等,更多功能就交給大佬們?nèi)ラ_發(fā)了。

到此這篇關于Android 中TextureView和SurfaceView的屬性方法及示例說明的文章就介紹到這了,更多相關Android extureView和SurfaceView 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 實例講解Android中的AIDL內(nèi)部進程通信接口使用

    實例講解Android中的AIDL內(nèi)部進程通信接口使用

    這篇文章主要通過實例介紹了Android中的AIDL內(nèi)部進程通信接口使用,文中通過一個音樂播放的服務編寫例子來講解AIDL的傳遞對象及一般使用步驟,需要的朋友可以參考下
    2016-04-04
  • Android AlertDialog實現(xiàn)分享對話框/退出對話框/下載對話框

    Android AlertDialog實現(xiàn)分享對話框/退出對話框/下載對話框

    這篇文章主要介紹了Android AlertDialog實現(xiàn)分享對話框/退出對話框/下載對話框的相關資料,需要的朋友可以參考下
    2016-04-04
  • 簡介Android 中的AsyncTask

    簡介Android 中的AsyncTask

    AsyncTask是一個很常用的API,尤其異步處理數(shù)據(jù)并將數(shù)據(jù)應用到視圖的操作場合。接下來通過本文給大家介紹Android 中的AsyncTask,感興趣的朋友一起學習吧
    2016-03-03
  • 如何在Android App中集成支付寶和微信支付功能

    如何在Android App中集成支付寶和微信支付功能

    支付是各位Android開發(fā)者們在日常工作中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關于如何在Android App中集成支付寶和微信支付功能的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友下面隨著小編來一起學習學習吧
    2018-05-05
  • Android進階CameraX與Camera2使用比對詳解

    Android進階CameraX與Camera2使用比對詳解

    這篇文章主要為大家介紹了Android進階CameraX與Camera2使用比示例對詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Flutter Http分塊下載與斷點續(xù)傳的實現(xiàn)

    Flutter Http分塊下載與斷點續(xù)傳的實現(xiàn)

    這篇文章主要介紹了Flutter Http分塊下載與斷點續(xù)傳的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • android @override 報錯解決方案

    android @override 報錯解決方案

    android @override 報錯:就是說Java 1.5的編譯器默認對父類的方法進行覆蓋,采用@Override進行說明;但1.6已經(jīng)擴展到對接口的方法;所以如果還是以Java 1.5的編譯器來編譯的話,會出現(xiàn)錯誤
    2012-12-12
  • Android Jetpack導航組件Navigation創(chuàng)建使用詳解

    Android Jetpack導航組件Navigation創(chuàng)建使用詳解

    這篇文章主要為大家介紹了Android Jetpack導航組件Navigation創(chuàng)建及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • AndroidQ(10)黑暗模式適配的實現(xiàn)

    AndroidQ(10)黑暗模式適配的實現(xiàn)

    這篇文章主要介紹了AndroidQ(10)黑暗模式適配的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 自定義GridView并且實現(xiàn)拖拽(附源碼)

    自定義GridView并且實現(xiàn)拖拽(附源碼)

    本文實現(xiàn)了GridView的拖拽功能,原理很簡單只是在交換位置上記錄了X軸的相關坐標,計算了X軸的相關變量,實例代碼如下,感興趣的額朋友可以參考下哈
    2013-06-06

最新評論