Persegi panjang menggambar kanvas Android

104

cara menggambar persegi panjang kosong dengan dll. borderWidth = 3 dan borderColor = hitam dan bagian dalam persegi panjang tidak memiliki konten atau warna. Fungsi mana di Canvas yang akan digunakan

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

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Terima kasih.

Saya mencoba contoh ini

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

Ini menggambar persegi panjang dan mengisinya dengan warna hitam tetapi saya hanya ingin "bingkai" di sekitar seperti gambar ini:

masukkan deskripsi gambar di sini

Kec
sumber

Jawaban:

158

Coba paint.setStyle(Paint.Style.STROKE)?

Pandur
sumber
124

Dengan asumsi bahwa " bagian dalam persegi panjang tidak memiliki warna konten " berarti Anda menginginkan isian yang berbeda dalam persegi panjang; Anda perlu menggambar persegi panjang di dalam persegi panjang Anda kemudian dengan lebar goresan 0 dan warna isian yang diinginkan.

Sebagai contoh:

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 );

    }

}

Aktivitas untuk memulainya:

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);

    }
}

... akan menjadi seperti ini:

masukkan deskripsi gambar di sini

DonGru
sumber
Sebenarnya ini yang saya butuhkan screencast.com/t/oFYF5kGtw5B persegi panjang merah itu setelah saya menggambar semua hanya untuk menambahkan persegi panjang itu mungkinkah?
Kec
21
Ini adalah solusi paint.setStyle (Style.STROKE); Terimakasih atas bantuannya.
Kec
Saya pikir DonGru dan Juan memberikan penjelasan yang bagus di sini .. tetapi jawaban satu baris yang tepat untuk apa yang diminta penulis telah disediakan di bawah ini oleh @Yuck - paint.setStyle (Paint.Style.STROKE)
alkemis
Jawaban ini tidak sesuai dengan jawabannya. Itu tidak menunjukkan jawaban yang benar. Jawaban Pandur benar.
Sonhja
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);
Cristopher Loli
sumber
7

Buat kelas baru MyView, Which extends View. Ganti onDraw(Canvas canvas)metode untuk menggambar persegi panjang 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)

 }

}

Kemudian Pindahkan aktivitas Java Anda untuk setContentView()menggunakan Tampilan kustom kami, MyView. Panggil seperti ini.

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

Untuk lebih jelasnya bisa anda kunjungi disini

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

IntelliJ Amiya
sumber
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

dan salah satu dari Anda drawRectharus bekerja.

Kenny Lim
sumber
0

Tidak tahu apakah ini sudah terlambat, tetapi cara saya menyelesaikannya adalah dengan menggambar empat persegi panjang tipis yang bersama-sama membentuk satu perbatasan besar. Menggambar perbatasan dengan satu persegi panjang tampaknya tidak dapat dilakukan karena semuanya buram, jadi Anda harus menggambar setiap tepi perbatasan secara terpisah.

Steven
sumber
Atau dua persegi panjang satu di dalam lainnya :)
P-RAD
Atau lingkaran, lingkaran dengan warna latar belakang, tiga garis drawLines () dan persegi panjang, untuk baris keempat.
Tatarize
0

Kode baik-baik saja setStyle cat sebagai STROKE

paint.setStyle(Paint.Style.STROKE);
pengguna3013823
sumber