0
Я пытаюсь разбить круг на что-то в этом роде: http://i.stack.imgur.com/hNg3E.png Я хочу покрасить большую дуговую часть круга прозрачным цветом и малой дугой круга с черным цветом. Вот что я пробовал, но не смог достичь конечной цели:андроид расколол круг, не принимая во внимание
public class SplitCircleDrawable extends Drawable {
private final Bitmap mBitmap;
private final Paint mPaint;
private final Paint mBackGroundPaint,mTransparentPaint;
private final RectF mRectF;
private final int mBitmapWidth;
private final int mBitmapHeight;
private Context mCtx;
public SplitCircleDrawable(Bitmap bitmap, Context mContext) {
mCtx = mContext;
mBitmap=bitmap;
mRectF = new RectF();
mPaint = new Paint();
mBackGroundPaint = new Paint();
mTransparentPaint=new Paint();
mBackGroundPaint.setColor(0x97021829);
mTransparentPaint.setColor(Color.TRANSPARENT);
mBackGroundPaint.setDither(true);
mBackGroundPaint.setAntiAlias(true);
mPaint.setAntiAlias(true);
mPaint.setDither(true);
final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
// NOTE: we assume bitmap is properly scaled to current density
mBitmapWidth = mBitmap.getWidth();
mBitmapHeight = mBitmap.getHeight();
}
@Override
public void draw(Canvas canvas) {
canvas.drawOval(mRectF, mPaint);
canvas.drawArc(mRectF, 0, 180, false, mBackGroundPaint);
// canvas.drawArc(mRectF, 0, 45, true, mTransparentPaint);
// canvas.drawArc(mRectF, 45, 135, true, mBackGroundPaint);
// canvas.drawArc(mRectF, 135, 180, true, mTransparentPaint);
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
mRectF.set(bounds);
}
@Override
public void setAlpha(int alpha) {
if (mPaint.getAlpha() != alpha) {
mPaint.setAlpha(alpha);
invalidateSelf();
}
}
@Override
public void setColorFilter(ColorFilter cf) {
mPaint.setColorFilter(cf);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicWidth() {
return mBitmapWidth;
}
@Override
public int getIntrinsicHeight() {
return mBitmapHeight;
}
public void setAntiAlias(boolean aa) {
mPaint.setAntiAlias(aa);
invalidateSelf();
}
@Override
public void setFilterBitmap(boolean filter) {
mPaint.setFilterBitmap(filter);
invalidateSelf();
}
@Override
public void setDither(boolean dither) {
mPaint.setDither(dither);
invalidateSelf();
}
}
Любая помощь на этом PLS?
, что удивительно, теперь вырезанная область находится говорят северо-западном углу, я хочу, чтобы получить его вниз (юг), а также Я хочу немного увеличить область красной зоны, как мне это сделать. Это намного больше, вы сохранили меня – GeekyCoder
используйте «путь», чтобы построить треугольник внизу, что-то вроде этого: 'path.reset() ; path.lineTo (0, mRectF.height()); path.lineTo (x, mRectF.height()); path.lineTo (0, y); path.close(); 'изменение x и y для достижения эффекта желания , – andrew
Я пробовал что-то вроде этого, чтобы образовать треугольник внизу, но не удачу path.lineTo (mRectF.width()/2f, -mRectF.width()/2f); path.lineTo (-mRectF.width()/2f, -mRectF.width()/2f); path.close(); – GeekyCoder