Wykonałem tę niestandardową komendę, która powinna przypiąć dowolne duble w okręgu. Ale z moją implementacją przekazywana taca jest wyjściem w oryginalnej formie, nie w formie okrągłej.Android: Circular Drawable
public class CircularDrawable extends Drawable {
Paint mPaint,xfermodePaint;
Drawable mDrawable;
int[] vinylCenter = new int[2];
int radius;
Bitmap src;
PorterDuffXfermode xfermode;
Rect rect;
Canvas testCanvas;
public CircularDrawable(Drawable drawable) {
mDrawable = drawable;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(0xffffffff);
mPaint.setStyle(Paint.Style.FILL);
xfermodePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
xfermode=new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
xfermodePaint.setXfermode(xfermode);
testCanvas=new Canvas();
}
@Override
public void setBounds(Rect bounds) {
super.setBounds(bounds);
mDrawable.setBounds(bounds);
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
mDrawable.setBounds(left, top, right, bottom);
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
vinylCenter[0] = bounds.width()/2;
vinylCenter[1] = bounds.height()/2;
radius = (bounds.right - bounds.left)/2;
src = Bitmap.createBitmap(bounds.width(), bounds.height(), Bitmap.Config.ARGB_8888);
testCanvas.setBitmap(src);
}
@Override
public void draw(Canvas canvas) {
canvas.save();
canvas.drawARGB(0, 0, 0, 0);
canvas.drawCircle(vinylCenter[0],vinylCenter[1],radius,mPaint);
mDrawable.draw(testCanvas);
canvas.drawBitmap(src,0f,0f,xfermodePaint);
}
@Override
public void setAlpha(int alpha) {/*ignored*/}
@Override
public void setColorFilter(ColorFilter colorFilter) {/*ignored*/}
@Override
public int getOpacity() {
/*ignored*/
return 0;
}
}
Jaki jest mój błąd?
Używam również SquareImageview do wyświetlania tego losowania, które powoduje, że widok jest kwadratowy w onMeasure. To pytanie nie jest przeznaczone do okrągłego podglądu obrazu.
patrz [to ] (http://androidxref.com/6.0.0_r1/xref/frameworks/support/v4/donut/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java) jako odniesienie – pskink
@pskink, ale jest to inna implementacja. Chcę wiedzieć, jaki jest mój błąd w implementacji Porter/Duff. –
jeśli jest kwadratowy oznacza to, że rysujesz cały obszar "DST" ' – pskink