フリープログラマー日記

iOS,アンドロイド開発を気ままにしながら生きてるおじさんのブログです。

第7回 Android版、直線と半円を描いてみる。

先にswift版を作りましたが、Android版に移植しました。

半円を描くところで少し手間取りましたが、同じようにできました。

           //  トラックの描画
        
        float r = 0.19f;

        while (r<0.28f) {
            r += 0.02f;
            track(width * r, canvas);
        }
        
    }

    void track(float r, Canvas canvas) {

        float width = getWidth();
        float height = getHeight();

        // 陸上トラック、青色、線5本を描く
        float a = width * 17 / 100;        // 直線の長さの半分
        float lineWidth = width * 2 / 1000;        // 線幅

        // アンドロイドではcanvasを使用する,canvasは呼び出し元にあるので引数で受け取る

        // android では Paintクラスを使って色やスタイルを決めていく
        Paint paint = new Paint();

        // 線幅をセット
        paint.setStrokeWidth(lineWidth);
        
        // 描画色を青色にセット
        paint.setColor(Color.BLUE);
        
        // 横線を引く
        final float x1 = width/2 - a;
        final float y1 = height/2 - r;
        final float x2 = width/2 + a;
        final float y2 = height/2 + r;
        canvas.drawLine(x1,y1,x2,y1,paint);
        canvas.drawLine(x1,y2,x2,y2,paint);

        // 左右の半円
        
        paint.setStyle(Paint.Style.STROKE);
        RectF leftCorner = new RectF(x1-r,y1,x1+r,y2);
        RectF rightCorner = new RectF(x2-r,y1,x2+r,y2);

        // Android の弧を描く角度はラジアンではない。開始角と描画角を指定する。
        canvas.drawArc(leftCorner,90,180,false,paint);
        canvas.drawArc(rightCorner,270,180,false,paint);

    }

単位が違うことが一番のネックかもしれません。
Androidではここはfloatを使うんですよね。

ささっと作ったので、少々雑いかもしれません。

画像は結構いい感じです。

f:id:momonga117:20180508225337p:plain