Android कैनवास आयत बनाते हैं


105

आदि के साथ खाली आयत कैसे खींचना है = सीमा 3 और सीमा = काले और आयत के भीतर के भाग में सामग्री या रंग नहीं है। कैनवस में कौन सा फ़ंक्शन उपयोग करने के लिए

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

    }
}

... इस तरह करेंगे बाहर:

यहां छवि विवरण दर्ज करें


वास्तव में यह वही है जो मुझे चाहिए कि मैं आयत को जोड़ने के लिए सब कुछ आकर्षित करने के बाद मुझे जो कुछ चाहिए, वह है आयताकारक sctast.com/t/oFYF5kGtw5B?
केईसी

21
यह समाधान paint.setStyle (Style.STROKE) है; सहायता के लिए धन्यवाद।
Kec

मुझे लगता है कि DonGru और जुआन ने यहां एक शानदार व्याख्या दी है .. लेकिन लेखक ने जो पूछा है उसका सटीक एक लाइन उत्तर नीचे दिया गया है @Yuck - paint.setStyle (Paint.Style.STROKE)
कीमियागर

यह उत्तर उत्तर के साथ फिट नहीं है। यह स्पष्ट उत्तर नहीं दिखाता है। पांडुर का जवाब सही है।
सोनहजा


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)

 }

}

फिर setContentView()हमारे कस्टम दृश्य, MyView.Call को इस तरह उपयोग करके अपनी जावा गतिविधि को आगे बढ़ाएँ।

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

अधिक जानकारी के लिए आप यहां जा सकते हैं

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



0

पता नहीं अगर यह बहुत देर हो चुकी है, लेकिन जिस तरह से मैंने इसे हल किया वह चार पतली आयतों को आकर्षित करने के लिए था जो एक साथ मिलकर एक बड़ी सीमा बनाते थे। एक आयत के साथ सीमा खींचना सभी अपारदर्शी होने के बाद से अनुपयुक्त प्रतीत होता है, इसलिए आपको सीमा के प्रत्येक किनारे को अलग से खींचना चाहिए।


या दो एक दूसरे के अंदर आयताकार :)
P-RAD

या एक वृत्त, पृष्ठभूमि रंग का एक चक्र, चौथी खंड के लिए एक तीन खंडों वाले ड्रालाइन () और एक आयत।
ताताराइज करें

0

कोड ठीक है बस सेट पेंट की STROKE के रूप में

paint.setStyle(Paint.Style.STROKE);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.