मैंने एक सर्कल बटन बनाया जो एक फ़ंक्शन कॉल करते समय उसका रंग बदल सकता है। मैं जो चाहता हूं वह एक और बनाना है, जो एक ही सर्कल बटन बनाता है लेकिन एक रेडियल ग्रेडियेंट के साथ जो रंग में चयनित रंग के साथ शुरू होता है और जब आप सर्कल से बाहर जाते हैं तो पारदर्शी हो जाता है।कैनवास में रेडियल ढाल के साथ एक सर्कल कैसे आकर्षित करें?
मैंने How to set gradient style to paint object? पर पोस्ट किए गए एक का उपयोग कर एक समान कोड बनाया लेकिन काम नहीं किया।
कोड है कि मैं करने की कोशिश की इस porpuse लिए है:
mPaint.setShader(new RadialGradient(0, 0, height/3, Color.BLACK, Color.TRANSPARENT, Shader.TileMode.MIRROR));
निम्नलिखित वर्ग एक है कि मैं एक सर्किल बटन के लिए बनाई गई है।
public class ColorGradientCircleButton extends View{
private Paint mPaint;
private Paint mBitmapPaint;
private Bitmap mBitmap;
private Canvas mCanvas;
private int width, height;
public ColorGradientCircleButton(Context context) {
super(context);
init();
}
public ColorGradientCircleButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ColorGradientCircleButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w;
height = h;
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mCanvas.drawCircle(w/2, h/2, h/3, mPaint);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
}
public void changeColor(int color){
mPaint.setColor(color);
mCanvas.drawCircle(width/2, height/2, height/3, mPaint);
invalidate();
}
}
अरे ग्रेब्रियल। यह कोड तकनीकी रूप से बहुत ही आशाजनक दिखता है। मैं सकारात्मक हूं कि हम इसे सही कर सकते हैं। सबसे पहले, आप 'ऑनसाइज चेंज' में बिटमैप क्यों बना रहे हैं? 'Andorid.graphics' के साथ कस्टम व्यू बनाते समय, उस दृश्य के कैनवास पर सीधे आकर्षित करने की आवश्यकता होनी चाहिए। आप उस विधि में क्या करते हैं वह अविश्वसनीय रूप से महंगा है और आवश्यक नहीं है। आपको 'ऑनड्रा' दिए गए कैनवास का उपयोग करके सर्कल खींचना चाहिए। यदि यह आपकी समस्या को हल करने के लिए पर्याप्त नहीं है, तो मैं कुछ और विस्तार से पोस्ट करूंगा। – Tom
हाय टॉम, मैंने बिटमैप बनाया क्योंकि मुझे लगता है कि इसके साथ मैं दृश्य की चौड़ाई और ऊंचाई को नियंत्रित कर सकता हूं। इसलिए, मैंने बिटमैप को हटाने, अपने सुधार जोड़ने के लिए दृश्य को संशोधित किया लेकिन कुछ अच्छी तरह से काम नहीं करता है। वह मेरा कोड है https://gist.github.com/galaxyfeeder/7026090 –
हाय फिर से, मुझे मिल गया, मैं कन्स्ट्रक्टर में चौड़ाई और ऊंचाई का अनुरोध कर रहा था, लेकिन ऑन ड्रा को पहले निष्पादित किया गया है, इसलिए मैं अनुरोध करता हूं कि मैं क्या करूँ 'ऑनड्रा' में दृश्य की ऊंचाई और चौड़ाई, यहां मेरा वास्तविक कोड है जो अच्छी तरह से काम करता है: https://gist.github.com/galaxyfeeder/7026165 –