packagecom.etwod.yulin.t4.unit;importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.PorterDuff;importandroid.graphics.PorterDuffXfermode;importandroid.graphics.RectF;importandroid.support.annotation.ColorInt;importandroid.util.AttributeSet;importandroid.view.View;importcom.etwod.yulin.android.R;/*** A circular cover view.Above other views to hide the conner.You can set radians by self.

* Created by

* 磊磊tua

* 覆盖形成圆角*/

public class CircularCoverView extendsView {private int leftTopRadians = 30; //leftTopRadians

private int leftBottomRadians = 30; //leftBottomRadians

private int rightTopRadians = 30; //rightTopRadians

private int rightBottomRadians = 30; //rightBottomRadians

private int coverColor = 0xffeaeaea; //color of cover.

publicCircularCoverView(Context context) {this(context, null, 0);

}publicCircularCoverView(Context context, AttributeSet attrs) {this(context, attrs, 0);

}public CircularCoverView(Context context, AttributeSet attrs, intdefStyleAttr) {super(context, attrs, defStyleAttr);

TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.CircularCoverView);

leftTopRadians=typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_left_top_radius, leftTopRadians);

leftBottomRadians=typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_left_bottom_radius, leftBottomRadians);

rightTopRadians=typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_right_top_radius, rightTopRadians);

rightBottomRadians=typedArray.getDimensionPixelSize(R.styleable.CircularCoverView_right_bottom_radius, rightBottomRadians);

coverColor=typedArray.getColor(R.styleable.CircularCoverView_cover_color, coverColor);

}/*** set radians of cover.*/

public void setRadians(int leftTopRadians, int rightTopRadians, int leftBottomRadians, intrightBottomRadians) {this.leftTopRadians =leftTopRadians;this.rightTopRadians =rightTopRadians;this.leftBottomRadians =leftBottomRadians;this.rightBottomRadians =rightBottomRadians;

}/*** set color of cover.

*

*@paramcoverColor cover's color*/

public void setCoverColor(@ColorInt intcoverColor) {this.coverColor =coverColor;

}/*** create a sector-bitmap as the dst.

*

*@paramw width of bitmap

*@paramh height of bitmap

*@returnbitmap*/

private Bitmap drawSector(int w, inth) {

Bitmap bm=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

Canvas c= newCanvas(bm);

Paint p= newPaint(Paint.ANTI_ALIAS_FLAG);

p.setColor(0xFFFFCC44);//notice:cannot set transparent color here.otherwise cannot clip at final.

c.drawArc(new RectF(0, 0, leftTopRadians * 2, leftTopRadians * 2), 180, 90, true, p);

c.drawArc(new RectF(0, getHeight() - leftBottomRadians * 2, leftBottomRadians * 2, getHeight()), 90, 90, true, p);

c.drawArc(new RectF(getWidth() - rightTopRadians * 2, 0, getWidth(), rightTopRadians * 2), 270, 90, true, p);

c.drawArc(new RectF(getWidth() - rightBottomRadians * 2, getHeight() - rightBottomRadians * 2, getWidth(), getHeight()), 0, 90, true, p);returnbm;

}/*** create a rect-bitmap as the src.

*

*@paramw width of bitmap

*@paramh height of bitmap

*@returnbitmap*/

private Bitmap drawRect(int w, inth) {

Bitmap bm=Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

Canvas c= newCanvas(bm);

Paint p= newPaint(Paint.ANTI_ALIAS_FLAG);

p.setColor(coverColor);

c.drawRect(new RectF(0, 0, leftTopRadians, leftTopRadians), p);

c.drawRect(new RectF(0, getHeight() -leftBottomRadians, leftBottomRadians, getHeight()), p);

c.drawRect(new RectF(getWidth() - rightTopRadians, 0, getWidth(), rightTopRadians), p);

c.drawRect(new RectF(getWidth() - rightBottomRadians, getHeight() -rightBottomRadians, getWidth(), getHeight()), p);returnbm;

}

@Overrideprotected voidonDraw(Canvas canvas) {super.onDraw(canvas);

Paint paint= newPaint();

paint.setFilterBitmap(false);

paint.setStyle(Paint.Style.FILL);//create a canvas layer to show the mix-result

int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.MATRIX_SAVE_FLAG |Canvas.CLIP_SAVE_FLAG|Canvas.HAS_ALPHA_LAYER_SAVE_FLAG|Canvas.FULL_COLOR_LAYER_SAVE_FLAG|Canvas.CLIP_TO_LAYER_SAVE_FLAG);//draw sector-dst-bitmap at first.

canvas.drawBitmap(drawSector(getWidth(), getHeight()), 0, 0, paint);//set Xfermode of paint.

paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_OUT));//then draw rect-src-bitmap

canvas.drawBitmap(drawRect(getWidth(), getHeight()), 0, 0, paint);

paint.setXfermode(null);//restore the canvas

canvas.restoreToCount(sc);

}

}

更多相关文章

  1. Android(安卓)禁止下拉通知栏
  2. android 4.4.3 css hack 写法
  3. Android使edittext弹出的软键盘位于输入框下面而不是覆盖输入框
  4. Android(安卓)ListView嵌套Button,Button事件覆盖item事件解决办
  5. Android之百度地图开发,包含定位,覆盖物,经纬度位置转换,长按设置中
  6. Android(安卓)个别手机导航键覆盖布局解决办法
  7. 百度地图android sdk拖拽overlay item
  8. Android本地数据搜索实现
  9. 百度地图SDK for Android(安卓)v2.1.2全新发布

随机推荐

  1. Android Debug Bridge(adb, Android调试
  2. Android视频播放程序关键部分简要解析
  3. Android API Demos学习(1) - Hello World
  4. Android中Bundle的使用示例
  5. VisionMobile:生态环境的游戏:破坏Android
  6. Android 开发论坛
  7. android自定义style主题样式
  8. Android 中的ORM框架
  9. Android和J2ME按钮接口之简单对比
  10. Android7.0 系统启动流程---system_serve