介紹繼承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劉慶峰帶來了人工智慧建設的相關提案。近年來,我國在資料方面的優勢和 推動應用開始實現突破式增長,我國在這一波人工智慧浪潮中,已開始逐漸領先於發達國家進入人工智慧...