欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android利用SurfaceView實(shí)現(xiàn)簡單計(jì)時(shí)器

自學(xué)了android有幾個(gè)月了,跟著網(wǎng)上的節(jié)奏,應(yīng)該早點(diǎn)寫些博客來提高自己的水準(zhǔn)的。但苦于技術(shù)水準(zhǔn)始終不自信(也是不過關(guān)的結(jié)果吧),就一直只是將自己學(xué)習(xí)過程中的問題和重要的知識(shí)點(diǎn)寫在自己的筆記文檔中。

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、微信小程序定制開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!

但,總感覺一個(gè)人寫下來成就感還是欠缺了那么一些,而且有些問題及解答方法拋出來,是有可能得到更多好的反饋及解決方案的。于是,本著不作不會(huì)死的心態(tài),一步一步在技術(shù)成長的道路前行——>這篇博客就是其中一步!

若博客中有些技術(shù)知識(shí)點(diǎn)有誤或者有更優(yōu)化的解答方案,還望各位小伙伴多多指出。

以下是正題了:

目標(biāo):利用SurfaceView實(shí)現(xiàn)一個(gè)簡單的計(jì)時(shí)器

圖示:

Android利用SurfaceView實(shí)現(xiàn)簡單計(jì)時(shí)器

描述:1.利用SurfaceView來實(shí)現(xiàn)計(jì)時(shí)功能,同時(shí)不斷將圓弧畫滿;2.點(diǎn)擊按鈕可以停止計(jì)時(shí);

重點(diǎn):

1.自定義SurfaceView中針對(duì)SurfaceHolder.CallBack的三個(gè)方法進(jìn)行覆寫;

2.通過surfaceHolder.lockCanvas()在新開的線程中得到canvas對(duì)象,從而進(jìn)行圖形和時(shí)間文字的繪制;

3.通過設(shè)置flag值,從而控制在線程run()方法中邏輯代碼的執(zhí)行;

重要部分代碼:

public TestView(Context context) { 
  super(context); 
  surfaceHolder = getHolder(); 
  surfaceHolder.addCallback(this); 
  countThread = new CountThread(surfaceHolder); 
} 
 
public TestView(Context context, AttributeSet attributeSet) { 
  super(context, attributeSet); 
  surfaceHolder = getHolder(); 
  surfaceHolder.addCallback(this); 
  countThread = new CountThread(surfaceHolder); 
} 

以上為自定義的SurfaceView(TestView)的構(gòu)造函數(shù),做相應(yīng)的初始化工作。(第二個(gè)構(gòu)造方法在實(shí)現(xiàn)過程中沒有覆寫,導(dǎo)致如果是通過布局文件引入進(jìn)Activity中時(shí),則顯示不出View——>也就是一般自定義View一定要覆寫的構(gòu)造方法)。
在構(gòu)造方法中初始化了自定義的內(nèi)部線程類CountThread,用來執(zhí)行繪制工作。

以下為CountThread類的run()方法執(zhí)行邏輯:

@Override 
    public void run() { 
      Canvas canvas = null; 
      int pivotX = getResources().getDisplayMetrics().widthPixels / 2; 
      RectF rectF = new RectF(pivotX - 300, pivotX - 300, pivotX + 300, pivotX + 300); 
      while (!isStop) { 
        try { 
          canvas = surfaceHolder.lockCanvas(); 
          canvas.drawColor(Color.WHITE);//設(shè)置畫布背景為白色 
//          canvas.drawRoundRect(300, 300, 600, 600, 150, 150, paint);//直接使用該行代碼來畫圓是行不通的,因?yàn)檫@個(gè)方法要求版本21,我的手機(jī)運(yùn)行android版本是19 
          canvas.drawArc(rectF, -90, endAngle++, false, paint);//-90在這里不等于270,所以要想從最上方開始畫弧,就得用-90 
          canvas.drawText(countTime(endAngle), pivotX, pivotX, paintText);//顯示計(jì)算的時(shí)間 
          Thread.sleep(1000); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        } finally { 
          if (canvas != null) {//需要對(duì)canvas進(jìn)行非空判斷 
            surfaceHolder.unlockCanvasAndPost(canvas); 
          } 
        } 
      } 
    } 

主要就是通過Thread.sleep(1000)來停頓一秒,從而通過endAngle來計(jì)數(shù)。

至此,基本的程序邏輯已經(jīng)實(shí)現(xiàn)。再講該自定義View引入進(jìn)Activity指定的layout布局文件中即可進(jìn)行顯示。

但,這其中也會(huì)涉及到相應(yīng)的問題。譬如:

1.圖示中的按鈕無法顯示出來,只能看到自定義的SurfaceView的視圖;

我的做法是:將布局設(shè)定為FrameLayout即可。因?yàn)镾urfaceView是浮在窗口的一層,那么就可以把它看做一個(gè)圖層。

2.java.lang.IllegalThreadStateException:Thread already started

該錯(cuò)誤表明,線程已經(jīng)存在了。這種錯(cuò)誤的操作重現(xiàn)是:按下home鍵或者menu鍵會(huì)導(dǎo)致該自定的SurfaceView銷毀,但線程并沒有被銷毀,再次啟動(dòng)該自定義SurfaceView的時(shí)候又去重新啟動(dòng)該線程。解決的方法是:

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
  if (!countThread.isAlive()) {//如果線程不存在,則啟動(dòng)線程——>當(dāng)應(yīng)用掛起的時(shí)候Thread是存在的,如果不做這個(gè)判斷,會(huì)報(bào)“Thread already started ”錯(cuò)誤 
    countThread.start();//SurfaceView創(chuàng)建時(shí)開啟線程 
  } 
} 

在surfaceCreated()方法中對(duì)該線程是否是在存活中進(jìn)行判斷。

當(dāng)然,這里面還有最重要的一個(gè)問題:

當(dāng)按下home鍵或者menu鍵時(shí),程序是沒有在計(jì)時(shí)的。那么這種情況下,我的一個(gè)解決方案是,通過開啟一個(gè)service來接收程序停止( onStop() )時(shí)已經(jīng)計(jì)時(shí)的數(shù)值,然后傳遞給service記下并計(jì)時(shí),當(dāng)應(yīng)用程序界面重新回歸屏幕時(shí)( onRestart() )則將數(shù)據(jù)取出并回傳到自定義的SurfaceView的邏輯run()方法中繼續(xù)計(jì)時(shí)。

整個(gè)小程序的代碼可以通過以下鏈接下載:

點(diǎn)擊進(jìn)入下載頁面:http://xiazai.jb51.net/201701/yuanma/AndroidSurfaceView(jb51.net).rar

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

分享名稱:Android利用SurfaceView實(shí)現(xiàn)簡單計(jì)時(shí)器
文章轉(zhuǎn)載:http://aaarwkj.com/article26/jeedjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站維護(hù)、電子商務(wù)、ChatGPT、網(wǎng)站導(dǎo)航、域名注冊(cè)

廣告

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

成都seo排名網(wǎng)站優(yōu)化
亚洲中文字幕精品视频乱码| 欧美黄色一级在线免费观看| 欧美日韩精品人妻一区| 99热国产这里只有精品| 欧美成人精品免费在线| 日韩精品亚洲专区在线观看 | 亚洲国产高清国产拍精品| 日韩亚洲在线中文字幕| 91九色精品视频在线观看| 久久这里只有精品伊人网| 久久精品国产亚洲av品| 日本中文字幕在线一区| 中文字幕日本人妻影视| 2021最新四虎永久免费| 亚洲熟女熟妇另类中文| 久久精品一区二区熟女| 九九视频免费观看5| 色婷婷亚洲综合色一区二区| 给我搜亚洲免费播放黄色大片| 日韩有码中文字幕av| 另类国产人妖免费视频网站大全| 日本成人午夜福利在线观看| 日韩av在线高清播放| 麻豆一区二区人妻网站| 亚洲一区精品二人人爽久久| 国产精品无卡无在线播放| 国产精品97久久97久久久久| 亚洲在线免费播放视频| 久久综激情丁香开心婷婷| 亚洲一区成人精品在线| 日韩三级成人在线视频 | 日本人妻精品在线观看| 99久久精品国产熟女| 少妇精品久久久一区二区三区| 成人黄色av大片在线观看| 国产乱来视频在线观看| 欧美大吊视频在线观看| 日本一区二区三级在线观看| 日本一区二区裸体视频| 中文字幕日韩人妻av| 亚洲国产精品午夜福利在线播放|