1

マップ上に手動で矢印を描きたい。この手法を使用して描画するとアプリの速度が低下するオーバーレイが多数あるため、パフォーマンスの問題のためにドローアブルの回転を使用していません。

GPSポイントと回転角度を指定して、そのポイント上に矢印を描く必要があるので、手動で矢印を描きます。オーバーレイ クラスを拡張し、draw メソッドで描画作業を行います。

助言がありますか ?

4

1 に答える 1

0

アプリで同じ問題に対処しました。コードは github にあります

基本的に、矢印を描く前にキャンバスをオーバーライドdrawして回転させます。

@Override
public void draw(Canvas canvas) {

    //NOTE: 0, 0 is the bottom center point of the bus icon

    //first draw the bus
    vehicle.draw(canvas);

    //then draw arrow
    if (arrow != null && heading != BusLocation.NO_HEADING)
    {
        //put the arrow in the bus window

        int arrowLeft = -(arrow.getIntrinsicWidth() / 4);
        int arrowTop = -vehicle.getIntrinsicHeight() + arrowTopDiff;

        //NOTE: use integer division when possible. This code is frequently executed
        int arrowWidth = (arrow.getIntrinsicWidth() * 6) / 10;  
        int arrowHeight = (arrow.getIntrinsicHeight() * 6) / 10;
        int arrowRight = arrowLeft + arrowWidth;
        int arrowBottom = arrowTop + arrowHeight;

        arrow.setBounds(arrowLeft, arrowTop, arrowRight, arrowBottom);

        canvas.save();
        //set rotation pivot at the center of the arrow image
        canvas.rotate(heading, arrowLeft + arrowWidth/2, arrowTop + arrowHeight / 2);

        Rect rect = arrow.getBounds();
        arrow.draw(canvas);
        arrow.setBounds(rect);

        canvas.restore();

    }

}
于 2012-10-18T11:19:04.427 に答える