在類似this question的方法中,我正在尋找一種將數據點繪製到Android視圖上的方法。最好是一個庫,它可以執行任意範圍的輸入,並允許平移和縮放(通過捏或縮放欄)。適用於Android的GPL兼容圖形庫
現在,我有子類-ED它執行以下歸一化的圖:
final int width = View.MeasureSpec.getSize(this.widthMeasureSpec);
final int height = View.MeasureSpec.getSize(this.heightMeasureSpec);
final float factorA = width/(maxA - minA);
final float factorS = height/(maxS - minS);
final float constFactorA = factorA * minA;
final float constFactorS = factorS * minS;
final int dataLength = data.length;
for (int i = 0; i < dataLength; ++i) {
if (i % 2 == 0)
_data[i] = _data[i] * factorA - constFactorA;
else
_data[i] = _data[i] * factorS - constFactorS;
}
和的onDraw(呼叫)到畫布的drawPoints法(也,我更新this.widthMeasureSpec和onMeasure()中的this.heightMeasureSpec)。
這是用minA/maxA作爲我自變量的邊界,minS/maxS作爲我的因變量的邊界。
這適用於顯示數據,但我希望別人已經解決了繪製座標軸和平移/縮放的問題。
我有大約150,000個數據點,我寧願將它們作爲浮點數來節省一半的內存。我不知道JavaScript中有多大的十進制數,但我真的不希望通過JavaScript爲Google Charts API或基於HTML的解決方案傳遞數據。
我在MyTouch 3g上運行(原來,3.5mm插孔之前,它是RAM升級),所以性能是一個問題。我想在GPLv3下發布最終的項目,因此這不包括GraphView。
這些圖形與this的圖形屬於同一類型,所以任何通過排除過於靠近在屏幕上顯示的點來進行的優化肯定會有所作爲。
對於200個rep點,我會很樂意幫你寫一個... :) FWW我強烈建議使用OpenGL來做這件事...一旦你的數據集在頂點緩衝區中,你不需要觸摸它,而h/w加速將使縮放和平移像黃油一樣平滑。但是如果你想使用普通的Canvas API(onDraw等),那麼建議你使用Matrix進行繪製。 – 2011-01-24 10:32:35
我從來沒有使用過OpenGL。 http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/(以及後續的部分)看起來是一個很好的介紹嗎?我看不到什麼單位的座標(即,點(1,1)是什麼意思?) – sargas 2011-01-24 20:28:54
在CUDA和其他加速技術之前的幾天,他們的確使用opengl/COGL和着色器來加強他們的編輯。 - 模因書。順便說一下,OpenGL實現本身可能太過CPU了 - 請記住,重繪可能需要時間。 – 2011-01-28 20:11:10