Androidキャンバス描画長方形


104

etc.で空の長方形を描画する方法。borderWidth= 3とborderColor = blackと長方形内の部分にはコンテンツも色もありません。Canvasで使用する関数

void drawRect(float left, float top, float right, float bottom, Paint paint)

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

ありがとう。

この例を試します

Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);

それは長方形を描き、それを黒色で塗りつぶしますが、私はこの画像のように周りに「枠」を付けたいだけです:

ここに画像の説明を入力してください


回答:



124

長方形内の部分にコンテンツの色がない」と想定すると、長方形内に異なる塗りつぶしが必要になることを意味します。あなたはあなたの長方形の中に長方形を描く必要があります、そしてストローク幅0と希望の塗りつぶし色で。

例えば:

DrawView.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 80, 80, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33, 60, 77, 77, paint );
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33, 33, 77, 60, paint );

    }

}

それを開始するアクティビティ:

StartDraw.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class StartDraw extends Activity {
    DrawView drawView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);

    }
}

...このようになります:

ここに画像の説明を入力してください


実際、これは私が必要なものですscreencast.com/t/oFYF5kGtw5B長方形を追加するためにすべてを描画した後、その赤い長方形は可能ですか?
Kec、2011

21
これはソリューションpaint.setStyle(Style.STROKE);です。手伝ってくれてありがとう。
Kec、2011

私はDonGruとファンがここに偉大な説明を与えたと思います..しかし、のために求めているものを著者に正確な1ラインの答えは@Yuckによって下に提供されている- paint.setStyle(Paint.Style.STROKE)
アルケミスト

この答えは答えと一致しません。現在の回答は表示されません。Pandurの答えは正しいものです。
Sonhja 2013

12
//white background
canvas.drawRGB(255, 255, 255);
//border's properties
paint.setColor(Color.BLACK);
paint.setStrokeWidth(0);        
paint.setStyle(Paint.Style.STROKE);         
canvas.drawRect(100, 100, 200, 200, paint);

7

新しいクラスを作成しますMyView, Which extends ViewonDraw(Canvas canvas)メソッドをオーバーライドして、上に長方形を描画しCanvasます。

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

 Paint paint;
 Path path;

 public MyView(Context context) {
  super(context);
  init();
 }

 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 public MyView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init();
 }

 private void init(){
  paint = new Paint();
  paint.setColor(Color.BLUE);
  paint.setStrokeWidth(10);
  paint.setStyle(Paint.Style.STROKE);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);

  canvas.drawRect(30, 50, 200, 350, paint);
  canvas.drawRect(100, 100, 300, 400, paint);
  //drawRect(left, top, right, bottom, paint)

 }

}

次に、JavaアクティビティをsetContentView()カスタムビューMyView.Call を使用するように移動します。

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(new MyView(this));
  }

詳細については、こちらをご覧ください

http://developer.android.com/reference/android/graphics/Canvas.html


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

そしてあなたのどちらかが動作するdrawRectはずです。


0

これが遅すぎるかどうかはわかりませんが、私がこれを解決した方法は、1つの大きな境界を構成する4つの薄い長方形を描画することでした。1つの四角形で境界線を描画すると、それらはすべて不透明であるため元に戻すことができないようです。境界線の各エッジを個別に描画する必要があります。


または、2つの長方形が互いに内側にある:)
P-RAD

または、4行目の円、背景色の円、3つのセグメント化されたdrawLines()、および長方形。
2015

0

コードは、ペイントのsetStyleをSTROKEに設定するだけで問題ありません。

paint.setStyle(Paint.Style.STROKE);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.