private void init() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(strokeColor);
mPaint.setStrokeWidth(strokeWidth);
mPaintLabel = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaintLabel.setStyle(Paint.Style.STROKE);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_support_select);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
//http://blog.csdn.net/kuaiguixs/article/details/78753149
float offset = strokeWidth / 2;
canvas.drawColor(solidColor);
RectF rec = new RectF(offset, offset, width - offset, height - offset);
if (isSelect) {
canvas.drawRoundRect(rec, cornersRadius, cornersRadius, mPaint);
canvas.drawBitmap(bitmap, getWidth() - labelWidth, getHeight() - labelHeight, mPaintLabel);
} else {
canvas.drawRoundRect(rec, cornersRadius, cornersRadius, mPaint);
}
}
如果一定不想重新切圖(就是將圖片切成圓角圖片),那么可以考慮采用bitmap轉圓角的方案來實現(xiàn)
public static Bitmap toRoundCorner(Bitmap bitmap, int pixels, boolean lt, boolean rt, boolean lb,
boolean rb) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Paint paint1 = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
paint.setAntiAlias(true);
paint1.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
paint1.setColor(0xaaaaaaaa);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
if(lt){
canvas.drawRect(0, 0, bitmap.getWidth()-pixels, bitmap.getHeight()-pixels, paint);
}
if(rt){
canvas.drawRect(pixels, 0, bitmap.getWidth(), bitmap.getHeight()-pixels, paint);
}
if(lb){
canvas.drawRect(0, pixels, bitmap.getWidth()-pixels, bitmap.getHeight(), paint);
}
if(rb){
canvas.drawRect(pixels, pixels, bitmap.getWidth(), bitmap.getHeight(), paint);
}
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
將bitmap自己畫一個圓角即可
網(wǎng)上抄的代碼,沒實測,不過目測應該是可以
lt = left top
rt = right Top
lb = left Bottom
rb = right Bottomprivate Bitmap roundBitmapByXfermode(Bitmap bitmap, int outWidth, int outHeight, int radius) {
if(bitmap == null) {
throw new NullPointerException("Bitmap can't be null");
}
// 等比例縮放拉伸
float widthScale = outWidth * 1.0f / bitmap.getWidth();
float heightScale = outHeight * 1.0f / bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.setScale(widthScale, heightScale);
Bitmap newBt = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
// 初始化目標bitmap
Bitmap targetBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(targetBitmap);
canvas.drawARGB(0, 0, 0, 0);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// 利用畫筆繪制底部圓角
canvas.drawRoundRect(new RectF(0, outHeight - 2 * radius, outWidth, outHeight), radius, radius, paint);
// 利用畫筆繪制左側矩形
canvas.drawRect(new RectF(0, 0, radius, outHeight), paint);
// 利用畫筆繪制頂部上面直角部分
canvas.drawRect(new RectF(0, 0, outWidth, outHeight - radius), paint);
// 設置疊加模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
// 在畫布上繪制原圖片
Rect ret = new Rect(0, 0, outWidth, outHeight);
canvas.drawBitmap(newBt, ret, ret, paint);
bitmap.recycle();
newBt.recycle();
return targetBitmap;
}
謝謝大家的回答我也寫了一個方法,目前已經(jīng)實現(xiàn)效果,
當 isSelect = false, 圓角矩形 沒有顯示出來效果,大家知道原因嗎
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。