पथ

2013-03-21 11 views
5

के साथ एंड्रॉइड ड्रा सर्कल मैं एक सर्कल को चित्रित करने के लिए एनिमेट करने की कोशिश कर रहा हूं। अपने कस्टम ध्यान में रखते हुए मैंपथ

private final Paint mPaint = new Paint() { 
    { 
     setDither(true); 
     setStyle(Paint.Style.STROKE); 
     setStrokeCap(Paint.Cap.ROUND); 
     setStrokeJoin(Paint.Join.ROUND); 
     setColor(Color.BLUE); 
     setStrokeWidth(30.0f); 
     setAntiAlias(true); 
    } 
}; 
... 
protected void onDraw(Canvas canvas) { 
    super.onDraw(); 
    if (mOval == null) { 
     mOval = new RectF(getLeft(), getTop(), getRight(), getBottom()); 
    } 
    if (mPath == null) { 
     mPath = new Path(); 
    mPath.moveTo(0, getHeight()/2); 
    } 

    float sweepAngle = Math.min((float) mElapsedTime/1000 * 60 * 1, 1) * 360; 
    if (sweepAngle == 0) { 
     mPath.reset(); 
    } else if (mCurrentAngle != sweepAngle) { 
    mPath.arcTo(mOval, mCurrentAngle, sweepAngle); 
    } 
    mCurrentAngle = sweepAngle; 
    canvas.drawPath(mPath, mPaint); 
} 

अंतराल पर मैं mElapsedTime अद्यतन करने रहा हूँ और invalidate() बुला है,। हालांकि, स्क्रीन पर कुछ भी नहीं खींचा गया है। मैंने कई बदलावों की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है। क्या मैं कुछ गलत कर रहा हूं? क्या इसे करने का कोई आसान रास्ता है? एक सर्कल के प्रतिशत को देखते हुए, मैं उस सर्कल को अधिक से अधिक स्क्रीन पर खींचा जाने में सक्षम होना चाहता हूं।

उत्तर

8

यहां दो बातें हैं:

  1. आप अंडाकार पर चाप निकालने से पहले canvas.drawOval(...) कॉल करनी होगी। अन्यथा यह दिखाई नहीं देगा। यही कारण है कि मेरी विधि काम नहीं किया।

  2. Canvas में drawArc विधि है जो प्रारंभ कोण और साफ़ करने के लिए एक डिग्री लेता है। http://developer.android.com/reference/android/graphics/Canvas.html#drawArc%28android.graphics.RectF,%20float,%20float,%20boolean,%20android.graphics.Paint%29 देखें। यही वह है जो मैं मंडलियों को आकर्षित करने के लिए देख रहा था।

संपादित करें: यहाँ मेरी View उपवर्ग से प्रासंगिक कोड है:

private final Paint mArcPaint = new Paint() { 
    { 
     setDither(true); 
     setStyle(Paint.Style.STROKE); 
     setStrokeCap(Paint.Cap.ROUND); 
     setStrokeJoin(Paint.Join.ROUND); 
     setColor(Color.BLUE); 
     setStrokeWidth(40.0f); 
     setAntiAlias(true); 
    } 
}; 

private final Paint mOvalPaint = new Paint() { 
    { 
     setStyle(Paint.Style.FILL); 
     setColor(Color.TRANSPARENT); 
    } 
}; 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    RectF mOval = new RectF(left, top, right, bottom); //This is the area you want to draw on 
    float sweepAngle = 270; //Calculate how much of an angle you want to sweep out here 
    canvas.drawOval(mOval, mOvalPaint); 
    canvas.drawArc(mOval, 269, sweepAngle, false, mArcPaint); //270 is vertical. I found that starting the arc from just slightly less than vertical makes it look better when the circle is almost complete. 
} 
+0

आप किसी भी कोड है? मैं एक ही समस्या के साथ – Machete

+0

@jmachete मैंने कुछ कोड के साथ अद्यतन किया है। – karl

+0

मैं कैनवास के केंद्र में इसे कैसे आकर्षित कर सकता हूं? – user2095470

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