2012-03-27 17 views
3

私は、Androidのリアルタイムチャート作成ユーティリティを作成しようとしています。ほとんどの場合、自分のパスの1つにデータポイントが多すぎると、OpenGLが壊れます。私はパスを使用しています。なぜなら、渡された値がグラフの現在の境界外にあるときに、マトリックスを介してデータセット全体を変換しているからです。私はこれについて間違った方法をとっていますか?この種のものには、より優れた/より適切なAPIがありますか?私はそれが可能だった場合、現在の境界への道を整えることを喜んで/私はそれを行う方法を知っていた。ありがとう!リアルタイムチャート作成のためのAndroidパス

onDraw:

@Override 
    protected void onDraw(Canvas canvas) { 
    scaleX = getWidth()/(maxX - minX); 
    scaleY = getHeight()/(maxY - minY); 
    // TODO: Use clips to draw x/y axis, allow color to be defined in attributes, etc. 
    canvas.drawColor(0xFF000000); 
    for (DataLine line : mPathList.values()) { 
     canvas.drawPath(line, line.getPaint()); 
    } 
    } 

当該

エラーOpenGLRendererからの警告である(DataLineのペイントオブジェクトを含むパスのサブクラスである)にレンダリングするには大きすぎる 「形状経路テクスチャ」

+0

関連するコードを投稿してください。私たちは、例外とあなたの現在のコードを知らなくても、あなたをたくさん助けることはできません。 –

+0

それほどたくさんあるわけではないので投稿しませんでしたが、とにかくやりますよ – JRaymond

+1

ハードウェアアクセラレーションされたキャンバスを使用していることから、ハニカム以上のアプリを開発しているとします。その場合、パスを変更することは非常にコストがかかることを覚えておく必要もあります。 (基本的に新しいテクスチャアップロードが行われます)。あなたが描画しているポイントの数が非常に少ない場合(いくつかのダースのような場合)、すべてのフレーム上のすべてのポイントを描画することができます(キュービック近似などを行う場合でも) – Renard

答えて

19

あなたがログに見えた場合は、そのようなエラーがわかります。

を0

04-04 10:39:06.314:/ OpenGLRenderer(6092)W:すべてがテクスチャとしてレンダリングされるとそこでハードウェアアクセラレーションをオンにするためのテクスチャ

にレンダリングするには大きすぎるシェイプパステクスチャのサイズ制限。大きな図形を小さな図形に分解すると、問題が解決します。または、ハードウェアアクセラレーションをオフにするだけです:

android:hardwareAccelerated="false" 
+0

それは私の問題を解決しました。しかし、「ScrolleView」が遅れ始めました! –

+0

ハードウェアアクセラレーションの対象となるビューをコードに設定するオプションがあります。それ以外の場合は、 "android:hardwareAccelerated =" false ""フラグを付けずに別のアクティビティで実行します。 – Zammbi

関連する問題