錄音計時的TimeView

2021-07-07 03:09:49 字數 2914 閱讀 1743

介紹繼承view實現計時功能的檢視

繼承view的子類必須有自己的建構函式

public

class

timeview

extends

view

public

timeview(context context, attributeset attrs)

}

timeview更新重繪需要override兩個方法, onmeasure 和 ondraw

先介紹onmeasure

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

引數詳解:

final

int widthmode = measurespec.getmode(widthmeasurespec);

final

int heightmode = measurespec.getmode(heightmeasurespec);

measurespec有3種模式分別是unspecified, exactly和at_most)

private

intgetrootmeasurespec(int windowsize, int rootdimension)

return measurespec;

}

那麼這些模式和fill_parent, wrap_content有什麼關係呢?

不同的模式需要怎麼處理呢?

看**的處理

final

int widthsize = measurespec.getsize(widthmeasurespec);

final

int heightsize = measurespec.getsize(heightmeasurespec);

//不處理measurespec.unspecified

if (widthmode == measurespec.unspecified || heightmode == measurespec.unspecified)

calcposition();

int width = 0, height = 0;

直接使用父類給的尺寸

if (widthmode == measurespec.exactly)

調整顯示的大小,mdigitwidth為本身的大小

else

if (widthmode == measurespec.at_most)

else

}if (heightmode == measurespec.exactly)

else

if (heightmode == measurespec.at_most)

//最後一定要呼叫此方法,不然會出錯

setmeasureddimension(width, height);

獲取drawable尺寸的方法

private

void

loadresources(context context)

resources res = context.getresources();

mdigits[0] = res.getdrawable(r.drawable.fmradio_digit_0);

mcolon = res.getdrawable(r.drawable.ringtone_trimmer_digit_colon);

mdigitoriginalwidth = mdigits[0].getintrinsicwidth();

mdigitoriginalheight = mdigits[0].getintrinsicheight();

mcolonoriginalwidth = mcolon.getintrinsicwidth();

mcolonoriginalheight = mcolon.getintrinsicheight();

mdigitwidth = mdigitoriginalwidth;

mdigitheight = mdigitoriginalheight;

mcolonwidth = mcolonoriginalwidth;

mcolonheight = mcolonoriginalheight;

mspace = (int)this.getresources().getdimension(r.dimen.margin_m);

}

ondraw()的實現

@override

protected

void

ondraw(canvas canvas)

else

}catch (exception e)

}

draw方法

private

void

draw(drawable drawable, boolean isdigit, canvas canvas)

else

mdrawstartx += mspace;

drawable.setalpha(malpha);

//繪製

drawable.draw(canvas);

}

timeview寫好,需要重新整理的時候,在其他類中需要重新整理的時候,如下使用:

timerview.requestlayout();
在自己類中,使用

invalidate();

錄音計時的實現方法

錄音中需要顯示錄音長度,顯示需要按s 錄音start的時候記下當時的時間 mstarttimestamp system.currenttimemillis mstarttimestamp 為錄音開始時間。錄音的時間通過handler傳送。times為和開始時間的差距。long currenttime...

FreeSwitch的錄音功能

一般 系統都可以將本系統內的語音通話錄製下來,freeswitch 系統中也可以進行語音錄製。需求 錄製系統中的所有通話。實現 1 建立乙個資料夾 freeswitch recordings archive 用來儲存錄音檔案 2 修改撥碼計畫,開啟 conf dialplan default.xml...

錄音界的智慧型首秀,訊飛智慧型錄音即將上市

2019 年人工智慧將規模化應用落地,要加快人工智慧基礎設施建設,推動教育醫療等社會事業的跨越式發展。本屆兩會上,科大訊飛董事長mejnhw劉慶峰帶來了人工智慧建設的相關提案。近年來,我國在資料方面的優勢和 推動應用開始實現突破式增長,我國在這一波人工智慧浪潮中,已開始逐漸領先於發達國家進入人工智慧...