1

ユーザーが漢字をスケッチできるようにするカスタム View サブクラスがあります。ライン座標は float 配列 (x1、y1、x2、y2、x2、y2、x3、y3...) に保存され、単位サイズにスケーリングされます。つまり、すべての座標は 0 と 1 の間の値です。これにより、後でスケッチを別のサイズのビューでアニメートするときに簡単になります。また、同じ座標空間にある別のアニメーションで描かれたものを比較するのにも役立ちます。また、その比較を支援するために、座標は垂直方向に反転されます。

つまり、View の onDraw メソッドで線をスケッチする場合、drawLines を呼び出してスケッチをプロットする前に、Canvas を拡大して移動する必要があります。

オフィス内のすべてのデバイス (Android ~2.3) ですべてが正常に表示され、エミュレーターも問題ありません。ただし、Samsung Galaxy S2 携帯電話を使用している 2 人のユーザーは、最近 Android 4 にアップグレードしたと報告しており、以下に示すように線が「ずれている」ように見えることに気付きました。

問題を示す

drawLines から Path オブジェクトを使用するように切り替えてみましたが、この場合、ユーザーは線がまったく表示されないと報告しました!

ペイントの設定方法は次のとおりです。

    paint = new Paint();        
    paint.setStyle(Style.STROKE);
    paint.setStrokeWidth(kTCDrawPathWidth);
    paint.setStrokeCap(Cap.ROUND);
    paint.setStrokeJoin(Join.BEVEL);
    paint.setColor(Color.WHITE);

そして、これは私がスケッチをプロットする場所です:

    RectF frame = getDrawingBounds();   
    canvas.drawRoundRect(frame, 3, 3, drawAreaFramePaint);      
    canvas.drawRoundRect(frame, 3, 3, drawAreaFrameBorderPaint);

    canvas.save();
    canvas.translate(frame.left, frame.top+frame.height());
    canvas.scale(frame.width(), -frame.height());

    for (TCPath path : paths)
        canvas.drawLines(path.getLines(), paint);

    if (drawingPath!=null)
        canvas.drawLines(drawingPath.getLines(), paint);

    canvas.restore();

明らかな問題はありますか?Android 4 でペイント/キャンバスの動作に変更はありましたか?

4

2 に答える 2

1

ハードウェア アクセラレーションを使用している場合は、描画を行っているカスタム ビュー (myView.setLayerType(View.LAYER_TYPE_SOFTWARE)) でオフにしてみてください。

それ以外の場合は、パスをもう一度試してみることをお勧めします。

于 2012-06-28T05:00:28.220 に答える
0

これが正しいかどうかはわかりませんが、念のため:

canvas.scale(frame.width(), -frame.height());

の前でマイナスシンガーは何をしているのframe.height()

あなたは何から差し引いていますか?

于 2012-06-28T02:43:46.203 に答える