मेरे पास ImageView
सबक्लास है जिसका उपयोग मैं गोलाकार कोनों वाले चित्रों को आकर्षित करने के लिए करता हूं। कोड this answer पर आधारित है, और है निम्नानुसार है:गोलाकार कोनों के साथ एक छवि दृश्य को चित्रित करते समय क्षमता
public class ImageViewRoundedCorners extends ImageView {
...
@Override
protected void onDraw(Canvas canvas) {
Bitmap scaledBitmap = Bitmap.createBitmap(getMeasuredWidth(),
getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas scaledCanvas = new Canvas(scaledBitmap);
super.onDraw(scaledCanvas);
drawRoundedCornerBitmap(canvas, scaledBitmap,
getMeasuredWidth(), getMeasuredHeight());
scaledBitmap.recycle();
}
protected void drawRoundedCornerBitmap(Canvas outputCanvas, Bitmap input, int w, int h) {
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
mPaint.reset();
mPaint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawPath(mClipPath, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(input, 0, 0, mPaint);
outputCanvas.drawBitmap(output, 0, 0, null);
}
}
इस कोड के साथ
, छवि ठीक गोलाकार कोनों के साथ तैयार की है। drawRoundedCornerBitmap
की पहली दो पंक्तियों पर आवंटन से बचने के लिए, मैं सीधे outputCanvas
पर आकर्षित करना चाहता हूं, जो मूल रूप से onDraw
पर कैनवास पास हो गया है। नई कार्यान्वयन इस तरह दिखता है:
protected void drawRoundedCornerBitmap(...) {
mPaint.reset();
mPaint.setAntiAlias(true);
outputCanvas.drawARGB(0, 0, 0, 0);
mPaint.setStyle(Paint.Style.FILL);
outputCanvas.drawPath(mClipPath, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
outputCanvas.drawBitmap(input, 0, 0, mPaint);
}
किसी कारण के लिए, इस कोड पोर्टर-गूंथा हुआ आटा मोड अनदेखी करने के लिए लगता है, और इसके बजाय सिर्फ सामान्य (गैर- गोल) कोनों के साथ छवि खींचता है। यह एक केस क्यों है? इंटरमीडिएट Bitmap
पर ड्राइंग के बारे में क्या है जो मूल कोड काम करता है?
मुझे भी वही समस्या है। –
क्या आपको इसके लिए कोई समाधान मिला है ... यहां तक कि मैं भी एक ही कोशिश कर रहा हूं :( –