点線と円弧 2020/10/01
Androidでは点線を簡単に描画できます。
シンプルな点線

これはストロークに影響をあたえます。直線のみならずストロークを使った描画が対象になります。文字も対象です。


        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5);
        paint.setColor(Color.rgb(255, 0, 0));
        paint.setPathEffect(new DashPathEffect(new float[]{10, 10}, 0));
        Path path = new Path();
        path.moveTo(20, 200);
        path.lineTo(500,  200);
        canvas.drawPath(path, paint);

        canvas.drawCircle(300, 350, 100, paint);
        String str = "閑";
        paint.setTextSize(200);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.rgb(255, 255, 255));
        canvas.drawText(str, 500, 900, paint);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(4);
        paint.setColor(Color.rgb(0, 0, 0));
        canvas.drawText(str, 500, 900, paint);
		
paint.setPathEffect(new DashPathEffect(new float[]{10, 10}, 0));
float[]{10, 10}で点線を描く長さと点線を描かない長さを決定します。これは複数設定可能です。例えば次第に点線の長さが長くなるようにすることもできます。

●による点線?

こんな点線もできます。

        Path shape = new Path();
        shape.addOval(-10, -10, 10,10, Path.Direction.CW);
        paint.setPathEffect(new PathDashPathEffect(shape, 30, 0,
                PathDashPathEffect.Style.TRANSLATE));
        paint.setColor(Color.rgb(0, 0, 255));
        canvas.drawLine(0, 480, 500, 480, paint);
		
ゴルフナビで作った。点線ではないかも

方向を派手に表示したかったので、太めのユニークな線を作りました。
makeArrowToRighは矢印を定義する関数。
drawArrowLineが描画する関数本体。

     private static Path makeArrowToRight()
    {
        int  w = ARROW_WIDTH;
        int h = ARROW_HEIGHT;

        Path p = new Path();
        p.moveTo(w, 0);
        p.lineTo(0, -h);
        p.lineTo(w * 2, -h);
        p.lineTo(w * 3, 0);
        p.lineTo(w * 2, h);
        p.lineTo(0, h);
        return p;
    }
    
   private void drawArrowLine(Canvas canvas, float fromX, float fromY, float toX, float toY )
    {
        PathEffect effect;

        effect = new PathDashPathEffect(makeArrowToRight(), ARROW_WIDTH * 4,
                0, PathDashPathEffect.Style.ROTATE);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStrokeWidth(ARROW_WIDTH * 15 / 10);
        paint.setColor(Color.argb(192, 255, 255, 255));
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawLine(fromX, fromY, toX, toY, paint);
        paint.setPathEffect(effect);
        paint.setColor(Color.argb(192, 0, 0, 255));
        canvas.drawLine(fromX, fromY, toX, toY, paint);
    }
		
円弧の描画
グラフィックスの基本円弧を忘れいたので追記します。



    private void drawArc(Canvas canvas){
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5);
        canvas.drawArc(new RectF(10.0f, 550.0f, 150.0f, 700.0f),
                180, 90, true, paint);
        canvas.drawArc(new RectF(200.0f, 550.0f, 350.0f, 700.0f),
                180, -90, false, paint);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.BLUE);
        canvas.drawArc(new RectF(10.0f, 800.0f, 150.0f, 950.0f),
                180, 90, true, paint);
        canvas.drawArc(new RectF(200.0f, 800.0f, 350.0f, 950.0f),
                180, -90, false, paint);


    }
		


上記のようにパラメータを設定します。
ダウンロード
MainActivity.java
GraphicView2.java