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


Jawaban:



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


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

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

dan salah satu dari Anda drawRectharus bekerja.


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.