99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

如何在Android中使用Surfaceview

如何在Android中使用Surfaceview?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

創新互聯公司堅持網頁設計,我們不會倒閉、轉行,已經持續穩定運營十多年。專業網站建設公司技術,豐富的成功經驗和創作思維,提供一站式互聯網解決方案,攜手廣大客戶,共同發展進步。我們不僅會設計網站,更會營銷型網站建設。幫助中小型企業在“互聯網+"的時代里通過推廣營銷傳播路線轉型升級,累計幫助多家客戶實現網絡營銷化,與我們一起攜手共創未來!

一.surfaceview與view的區別

Android 提供了view進行視圖的繪制,可以滿足大部分的會圖需求,但在有些時候卻是心有余而力不足。我們知道,view通過刷新來繪制視圖。android系統通過vsync信號來進行屏幕的繪制。刷新的時間間隔為16毫秒。如果在16毫秒內完成了索要刷新的繪制操作,那么在視覺效果上就不會產生卡頓的感覺。如果邏輯操作過多,頻繁刷新就會造成界面的卡頓。

  對于這一問題,Android提供了surfaceview來解決。它可以說是view的孿生兄弟,但他與view還是不同的,他與view的區別主要在一下幾點:

    view 主要是用于主動更新的情況下,而surfaceview主要是用于被動更新的情況下,列如頻繁的刷新。

    view主要是通過主線程對界面進行刷新,而surfaceview主要是通過子線程對view進行刷新。

    view在繪制時沒有使用雙緩沖機制,而surfaceview的底層是使用了雙緩沖機制。

二.surfaceview的使用

surfaceview雖然使用比較復雜,但是他有一套使用的模板,這就使得他使用起來比較簡單了,通常情況下,我們將會使用如下的方法步驟來實現surfaceview的創建:

   創建自定義的surfaceview,繼承自surfaceview 。并實現連個接口surfaceholder.Callback和Runnable接口。

public class MySurfaceView extends SurfaceView implements 
SurfaceHolder.Callback, Runnable

看如下方法,分別對應了surfaceview的創建改變和銷毀。

@Override
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

我們來看看他的模板:

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {

  private SurfaceHolder mHolder;
  private Canvas mCanvs;
  private Boolean mIsDrawing;


  public MySurfaceView(Context context) {
    this(context, null);
  }

  public MySurfaceView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  private void init() {
    mHolder = getHolder();
    mHolder.addCallback(this);
    setFocusable(true);
    setFocusableInTouchMode(true);
    this.setKeepScreenOn(true);
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    mIsDrawing = true;
    new Thread(this).start();
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    mIsDrawing = false;
  }

  @Override
  public void run() {
    while (mIsDrawing) {
      draw();
    }
  }


  public void draw() {
    try {
      mCanvs = mHolder.lockCanvas();
    } catch (Exception e) {

    } finally {
      mHolder.unlockCanvasAndPost(mCanvs);
    }
  }
}

以上的模板基本滿足大部分surfaceview的繪圖需求,唯一要注意的是,要把

mHolder.unlockCanvasAndPost(mCanvs);

放到finally中以保證每次都能提交修改。

只要我們在run方法中不斷的繪制就可以實現view的及時刷新,當然我們也可以在run方法中sleep減少資源的消耗。這個值一般在50到100毫秒之間。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯的支持。

網站欄目:如何在Android中使用Surfaceview
路徑分享:http://www.yijiale78.com/article6/gjhdog.html

成都網站建設公司_創新互聯,為您提供服務器托管動態網站響應式網站全網營銷推廣自適應網站做網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計