2013-12-12 5 views
16

पर भरे त्रिकोण को आकर्षित करने के लिए मेरे पास क्लास MyView है जो व्यू क्लास को बढ़ाता है। MyView भरने त्रिकोण आकर्षित करना चाहिए। मैंने एक त्रिकोण खींचा लेकिन मैं इसे भर नहीं सकता। यह मेरा OnDraw() विधि है:एंड्रॉइड कैनवास

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 

    paint.setColor(android.graphics.Color.BLACK); 
    canvas.drawPaint(paint); 

    paint.setStrokeWidth(4); 
    paint.setColor(android.graphics.Color.RED); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    paint.setAntiAlias(true); 

    Point a = new Point(0, 0); 
    Point b = new Point(0, 100); 
    Point c = new Point(87, 50); 

    Path path = new Path(); 
    path.setFillType(FillType.EVEN_ODD); 
    path.lineTo(b.x, b.y); 
    path.lineTo(c.x, c.y); 
    path.lineTo(a.x, a.y); 
    path.close(); 

    canvas.drawPath(path, paint); 
} 

उत्तर

20

मैं इस सवाल का जवाब मिल गया है:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 

    paint.setColor(android.graphics.Color.BLACK); 
    canvas.drawPaint(paint); 

    paint.setStrokeWidth(4); 
    paint.setColor(android.graphics.Color.RED); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    paint.setAntiAlias(true); 

    Point a = new Point(0, 0); 
    Point b = new Point(0, 100); 
    Point c = new Point(87, 50); 

    Path path = new Path(); 
    path.setFillType(FillType.EVEN_ODD); 
    path.moveTo(a.x, a.y); 
    path.lineTo(b.x, b.y); 
    path.moveTo(b.x, b.y); 
    path.lineTo(c.x, c.y); 
    path.moveTo(c.x, c.y); 
    path.lineTo(a.x, a.y); 
    path.close(); 

    canvas.drawPath(path, paint); 
} 

यह है कि मैं क्या एक परिणाम के रूप मिलता है उपयोगी।

  1. https://github.com/swapgo20/Android-Hand-Drawing
  2. https://github.com/codepath/android_guides/wiki/Basic-Painting-with-Views
  3. https://github.com/Korilakkuma/CanvasView
+4

पहली पंक्ति के लिए स्थानांतरित होना चाहिए। अन्यथा यह बिंदु (0, 0) से ड्राइंग शुरू कर देगा। इस मामले में कोई समस्या नहीं है, लेकिन मुझे इसका सामना करना पड़ा क्योंकि मैं केंद्र से आकर्षित करना चाहता था। – lucasjmatias

0

मैं बाहर बात करने के लिए है कि आप OnDraw() के रूप में यह कई बार कहा जाता है और प्रदर्शन की समस्याओं की ओर जाता है हो जाता है से एक वस्तु initiialize कभी नहीं करना चाहिए चाहते हैं।

0

यह उत्तर थोड़ा स्पष्टता प्रदान करता है कि @Egis द्वारा उत्तर में दिए गए नंबर कहां से आते हैं। (इस समभुज त्रिकोण नीचे एक उल्टा आकर्षित करेगा और kotlin में लिखा है)

class TriangleView(context: Context?, attrs: AttributeSet?) : View(context, attrs) { 

    val paint = Paint() 
    val path = Path() 

    override fun onDraw(canvas: Canvas?) { 
     super.onDraw(canvas) 
     canvas ?: return 
     canvas.drawPath(configurePath(canvas.width.toFloat(), path), configurePaint(paint)) 
    } 

    fun getHeight(width: Double): Float { 
     return Math.sqrt((Math.pow(width, 2.0) - Math.pow((width/2), 2.0))).toFloat() 
    } 

    fun configurePaint(paint: Paint): Paint { 
     paint.color = android.graphics.Color.WHITE 
     paint.isAntiAlias = true 

     return paint 
    } 

    fun configurePath(width: Float, path: Path): Path { 
     path.lineTo((width/2f), getHeight(width.toDouble())) 
     path.lineTo(width, 0F) 
     path.lineTo(0f, 0f) 

     return path 
    } 
} 

प्राप्त ऊंचाई समारोह Pythagoras' Theorem है और हमेशा अपने पक्ष लंबाई के 87% होने के लिए एक समभुज त्रिकोण की ऊंचाई मिलेगा ~

Gist यहां पाया जा सकता है, इसमें अन्य दिशाओं के लिए कोड

संबंधित मुद्दे