0
我寫了一個顯示模擬示波器的自定義視圖,它基本上包含一系列繪圖點,並週期性地將一個脈衝(一組單獨的點)放入主要系列中。唯一的問題是,我想在一個繪圖上以25mm/sec的正確速率更新點,在另一個繪圖上以4mm /秒的速度更新點。Android:Custom Oscilliscope View掃描速率
setRate()
在繪製視圖之前調用。 updateData()
從一個以60fps循環運行的線程調用SystemClock.elapsedRealtime()
。問題是,pxToDraw
是不正確的值,以保持我想要的速度。
這裏是我的代碼
static class FakePlot extends OscView.Plot {
public void setRate(int width, DisplayMetrics dm) {
float xdpi = dm.xdpi;
mWidthMm = width/ xdpi * 25.4f;
pxPerSec =TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, mScanRateMM, dm);
pxPerTick = ((float)width)/mData.length;
lastPulse = SystemClock.elapsedRealtime();
Log.e(TAG,String.format("setRate() %s: pxPerSec=%f pxPerTick=%f",mTitle,pxPerSec,pxPerTick));
}
/**
* Copy the next set of points along
* @param realTime
*/
public void updateData(long realTime) {
long diff = realTime - lastUpdate;
lastUpdate = realTime;
float pxToDraw = ((diff/1000f)/pxPerSec);
float ticksToDraw = pxToDraw/(1f/pxPerTick);
for (int j = 0; j < ticksToDraw; j++){
// update mData with the next ticksToDrawPoints
}
setChanged();
notifyObservers();
}
}
一個完整的工作示例(不正確的掃描速度是在這裏:http://pastebin.com/nHBxumhV)