ผ้าใบวาดรูปสี่เหลี่ยมผืนผ้าของ Android


105

วิธีการวาดสี่เหลี่ยมผืนผ้าว่างด้วย ฯลฯ borderWidth = 3 และ borderColor = สีดำและส่วนหนึ่งในสี่เหลี่ยมผืนผ้าไม่มีเนื้อหาหรือสี ฟังก์ชันใดใน 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

21
นี่คือโซลูชัน paint.setStyle (Style.STROKE); ขอบคุณที่ช่วยเหลือ.
Kec

ฉันคิดว่า DonGru และ Juan ให้คำอธิบายที่ดีที่นี่ .. แต่คำตอบเพียงบรรทัดเดียวสำหรับสิ่งที่ผู้เขียนขอมีอยู่ด้านล่างโดย @Yuck - paint.setStyle (Paint.Style.STROKE)
นักเล่นแร่แปรธาตุ

คำตอบนี้ไม่เข้ากับคำตอบ มันไม่แสดงคำตอบที่ถูกต้อง คำตอบของ Pandur เป็นคำตอบที่ถูกต้อง
Sonhja


7

MyView, Which extends Viewสร้างคลาสใหม่ แทนที่วิธีการวาดรูปสี่เหลี่ยมผืนผ้าบนonDraw(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()ใช้ View, MyView ที่กำหนดเองของเราโทรหาวิธีนี้

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

ดูรายละเอียดเพิ่มเติมได้ที่นี่

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



0

ไม่รู้ว่ามันสายเกินไปหรือเปล่า แต่วิธีที่ฉันแก้ปัญหานี้คือวาดสี่เหลี่ยมบาง ๆ สี่อันประกอบกันเป็นเส้นขอบขนาดใหญ่เส้นเดียว การวาดเส้นขอบด้วยสี่เหลี่ยมผืนผ้าเดียวดูเหมือนว่าจะไม่สามารถยกเลิกได้เนื่องจากเป็นแบบทึบทั้งหมดดังนั้นคุณควรวาดขอบแต่ละด้านแยกกัน


หรือสองรูปสี่เหลี่ยมด้านในอีกรูปหนึ่ง :)
P-RAD

หรือวงกลมวงกลมของสีพื้นหลังเส้นวาดแบ่งส่วนสามเส้น () และสี่เหลี่ยมผืนผ้าสำหรับบรรทัดที่สี่
Tatarize

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.