0

android.graphics.Path関数グラフを計算してオブジェクトに入れ、それを使っandroid.graphics.Canvas.drawPath()て描画しています。

これは、絶対y値が非常に高く(正または負のいずれか)、アプリが特定のデバイスで実行されていない限り、非常にうまく機能します。そうすると、パスがまったく描画されない可能性があります。これが発生するときのしきい値は、ランダムでデバイス固有のようです。

ここで何が問題になるのか誰か知っていますか?

[編集:これは、ターゲットAPIレベルが14以上の場合にのみ発生します]

編集:たとえば、View.onDraw(Canvas canvas)メソッド内の次のコードを見てください。

    Paint paint = new Paint();

    Path p1 = new Path();
    paint.setColor(Color.BLUE);
    for(float x = 0; x < getWidth(); x++)
        p1.lineTo(x, x);
    canvas.drawPath(p1, paint);

    Path p2 = new Path();
    paint.setColor(Color.GREEN);
    for(float x = 0; x < getWidth(); x++)
        p2.lineTo(x, x*x);
    canvas.drawPath(p2, paint);

最初のパスは、左上隅から右下に向かう線である必要があります。2番目のパスも同じように動作するはずですが、放物線の形をしています(そのため、その一部しか見ることができません)。

最初のパスは描画しますが、2番目のパスは描画しません。これは、明らかにy値が高くなりすぎるためです。「高すぎる」とはどういう意味かを知っておくといいでしょう;)

4

1 に答える 1

1

私は解決策を見つけました。

問題は、APIレベル14から、すべての描画がハードウェアアクセラレーションで行われ、すべての機能をサポートしていないことでした

この記事で説明されているように、ハードウェアアクセラレーションをオフにするのは簡単です。

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

詳細については、このブログ投稿をご覧ください。

于 2012-09-03T14:49:37.403 に答える