当前位置: 首页 > news >正文

百度网站介绍浪琴女士手表网站

百度网站介绍,浪琴女士手表网站,企业网站需要响应式,网站开发开发小游戏吗自定义label组件 支持边框绘制 支持shape背景(按指定圆角裁剪,矩形,圆角矩,圆形),支持指定角圆角 支持自定义阴影(颜色,偏移,深度) 边框颜色支持状态选择器 预览 核心绘制辅助类 public class LabelHelper {private final Paint paint;private Paint shadowPaint;private fina…自定义label组件 支持边框绘制 支持shape背景(按指定圆角裁剪,矩形,圆角矩,圆形),支持指定角圆角 支持自定义阴影(颜色,偏移,深度) 边框颜色支持状态选择器 预览 核心绘制辅助类 public class LabelHelper {private final Paint paint;private Paint shadowPaint;private final float[] radiusList new float[8];// 矩阵四角圆角 两个一组分别为一角的x轴半径y轴半径 四组分别为 上左 上右 下右 下左private final Rect rect;private final Path path;private final RectF rectF;private float strokeWidth;private ColorStateList strokeColor;private boolean hasRadius;//是否有圆角private int shadowColor;//是否有阴影private float shadowRadius;private float shadowDx;private float shadowDy;private Float contentInsetLeft null;private Float contentInsetRight null;private int defStrokeColor;LabelHelper(View view, Context context, AttributeSet attrs) {this(view, context, attrs, Color.TRANSPARENT);}LabelHelper(View view, Context context, AttributeSet attrs, ColorInt int defStrokeColor) {this.defStrokeColor defStrokeColor;TypedArray array context.obtainStyledAttributes(attrs, R.styleable.LabelView);// 圆角float radius array.getDimension(R.styleable.LabelView_android_radius, 0);float topLeftRadius array.getDimension(R.styleable.LabelView_android_topLeftRadius, radius);float topRightRadius array.getDimension(R.styleable.LabelView_android_topRightRadius, radius);float bottomLeftRadius array.getDimension(R.styleable.LabelView_android_bottomLeftRadius, radius);float bottomRightRadius array.getDimension(R.styleable.LabelView_android_bottomRightRadius, radius);// 阴影int shadowColor array.getColor(R.styleable.LabelView_android_shadowColor, Color.TRANSPARENT);float shadowRadius array.getFloat(R.styleable.LabelView_android_shadowRadius, 0.0f);float shadowDx array.getFloat(R.styleable.LabelView_android_shadowDx, 0.0f);float shadowDy array.getFloat(R.styleable.LabelView_android_shadowDy, 0.0f);if (array.hasValue(R.styleable.LabelView_android_contentInsetLeft)) {contentInsetLeft array.getDimension(R.styleable.LabelView_android_contentInsetLeft, 0);}if (array.hasValue(R.styleable.LabelView_android_contentInsetRight)) {contentInsetRight array.getDimension(R.styleable.LabelView_android_contentInsetRight, 0);}int anInt array.getInt(R.styleable.LabelView_fillType, 1);// 边框strokeWidth array.getDimension(R.styleable.LabelView_borderWidth, 0);try {strokeColor array.getColorStateList(R.styleable.LabelView_borderColor);} catch (Exception e) {e.printStackTrace();}if (strokeColor null) {strokeColor ColorStateList.valueOf(array.getColor(R.styleable.LabelView_borderColor, this.defStrokeColor));}view.setSelected(array.getBoolean(R.styleable.LabelView_selected, false));array.recycle();paint new Paint();paint.setAntiAlias(true);paint.setStyle(getPaintStyle(anInt));paint.setStrokeWidth(strokeWidth);rectF new RectF();rect new Rect();path new Path();setRadiusPx(view, topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius);view.setLayerType(LAYER_TYPE_HARDWARE, null);setShadow(shadowColor, shadowRadius, shadowDx, shadowDy);}// 设置阴影画笔private void setShadow(int shadowColor, float shadowRadius, float shadowDx, float shadowDy) {if (shadowPaint null) {shadowPaint new Paint();shadowPaint.setAntiAlias(true);shadowPaint.setStyle(Paint.Style.FILL);}this.shadowRadius Math.max(shadowRadius, 0);this.shadowDx shadowDx;this.shadowDy shadowDy;this.shadowColor shadowColor;shadowPaint.setColor(shadowColor);shadowPaint.setShadowLayer(this.shadowRadius, this.shadowDx, this.shadowDy, shadowColor);}private Paint.Style getPaintStyle(int type) {return switch (type) {case 0 - Paint.Style.FILL;case 2 - Paint.Style.FILL_AND_STROKE;default - Paint.Style.STROKE;};}void setStrokeWidth(int dp) {strokeWidth SizeUtils.dp2px(dp);paint.setStrokeWidth(strokeWidth);}void setStrokeColor(ColorInt int boundColor) {this.strokeColor ColorStateList.valueOf(boundColor);}void setFillType(Paint.Style style) {paint.setStyle(style);}void setRadiusPx(View view, float topLeft, float topRight, float bottomRight, float bottomLeft) {radiusList[0] topLeft;radiusList[1] topLeft;radiusList[2] topRight;radiusList[3] topRight;radiusList[4] bottomRight;radiusList[5] bottomRight;radiusList[6] bottomLeft;radiusList[7] bottomLeft;hasRadius topLeft 0 || topRight 0 || bottomRight 0 || bottomLeft 0;float offsetPaddingL 0;float offsetPaddingR 0;float offsetPaddingT 0;float offsetPaddingB 0;boolean autoInsetLeft contentInsetLeft null;boolean autoInsetRight contentInsetRight null;if (hasRadius) {if (autoInsetLeft) {offsetPaddingL Math.max(topLeft, bottomLeft) / 2f;} else if (contentInsetLeft ! 0) {offsetPaddingL contentInsetLeft;}if (autoInsetRight) {offsetPaddingR Math.max(topRight, bottomRight) / 2f;} else if (contentInsetRight ! 0) {offsetPaddingR contentInsetRight;}}if (isDrawBorder(view)) {offsetPaddingL Math.max(offsetPaddingL, strokeWidth);offsetPaddingR Math.max(offsetPaddingL, strokeWidth);offsetPaddingT strokeWidth;offsetPaddingB strokeWidth;}view.setPadding((int) Math.max(view.getPaddingLeft(), offsetPaddingL),(int) Math.max(view.getPaddingTop(), offsetPaddingT),(int) Math.max(view.getPaddingRight(), offsetPaddingR),(int) Math.max(view.getPaddingBottom(), offsetPaddingB));setStroke();view.invalidate();}private void setStroke() {if (hasRadius) {paint.setStrokeCap(Paint.Cap.ROUND);paint.setStrokeJoin(Paint.Join.ROUND);} else {paint.setStrokeCap(Paint.Cap.BUTT);paint.setStrokeJoin(Paint.Join.MITER);}}void draw(Canvas canvas, View view) {boolean drawBorder isDrawBorder(view);boolean isDrawShadow isDrawShadow();if (hasRadius || drawBorder || isDrawShadow) {view.getDrawingRect(rect);path.reset();rectF.set(rect);path.addRoundRect(rectF, radiusList, Path.Direction.CW);path.close();if (isDrawShadow) {// 绘制阴影canvas.drawPath(path, shadowPaint);path.reset();rectF.left Math.max(shadowRadius - shadowDx, 0);rectF.right - Math.max(shadowRadius shadowDx, 0);rectF.top Math.max(shadowRadius - shadowDy, 0);rectF.bottom - Math.max(shadowRadius shadowDy, 0);path.addRoundRect(rectF, radiusList, Path.Direction.CW);path.close();}if (hasRadius !(drawBorder paint.getStyle() ! Paint.Style.STROKE)) {// 形状裁剪canvas.clipPath(path);}}}void onDraw(Canvas canvas, View view) {if (isDrawBorder(view)) {Paint.Style style paint.getStyle();if (style ! Paint.Style.STROKE) {canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);}paint.setColor(getBoundColor(view));canvas.save();if (style ! Paint.Style.FILL) {path.reset();rectF.left (strokeWidth / 2f - 0.5f);rectF.top (strokeWidth / 2f - 0.5f);rectF.right - strokeWidth / 2f;rectF.bottom - strokeWidth / 2f;path.addRoundRect(rectF, radiusList, Path.Direction.CW);path.close();}// 边框绘制canvas.drawPath(path, paint);canvas.restore();}}Paint getPaint() {return paint;}public Rect getRect() {return rect;}public Path getPath() {return path;}public RectF getRectF() {return rectF;}public float getStrokeWidth() {return strokeWidth;}public boolean isHasRadius() {return hasRadius;}private int getBoundColor(View view) {int color this.defStrokeColor;if (strokeColor ! null) {if (strokeColor.isStateful()) {color strokeColor.getColorForState(view.getDrawableState(), strokeColor.getDefaultColor());} else {color strokeColor.getDefaultColor();}}return color;}private boolean isDrawBorder(View view) {return strokeWidth 0 getBoundColor(view) ! Color.TRANSPARENT;}private boolean isDrawShadow() {return shadowPaint ! null shadowColor ! Color.TRANSPARENT shadowRadius 0;} } 自定义控件示例 public class LabelFrameLayout extends FrameLayout {private LabelHelper helper;public LabelFrameLayout(Context context) {this(context, null);}public LabelFrameLayout(Context context, AttributeSet attrs) {this(context, attrs, 0);}public LabelFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);setWillNotDraw(false);helper new LabelHelper(this, context, attrs);}public void setFillType(Paint.Style style) {if (helper ! null helper.getPaint() ! null) {helper.setFillType(style);invalidate();}}public void setStrokeColor(ColorInt int boundColor) {if (helper ! null) {helper.setStrokeColor(boundColor);invalidate();}}public void setStrokeColorRes(ColorRes int colorRes) {if (helper ! null) {helper.setStrokeColor(getResources().getColor(colorRes));invalidate();}}public void setStrokeWidth(int dp) {if (helper ! null helper.getPaint() ! null) {helper.setStrokeWidth(dp);invalidate();}}public void setRadius(int radiusDp) {setRadiusPx(SizeUtils.dp2px(radiusDp));}public void setRadiusPx(float radius) {setRadiusPx(radius, radius, radius, radius);}public void setRadius(float topLeft, float topRight, float bottomRight, float bottomLeft) {setRadiusPx(SizeUtils.dp2px(topLeft), SizeUtils.dp2px(topRight), SizeUtils.dp2px(bottomRight), SizeUtils.dp2px(bottomLeft));}public void setRadiusPx(float topLeft, float topRight, float bottomRight, float bottomLeft) {if (helper ! null) {helper.setRadiusPx(this, topLeft, topRight, bottomRight, bottomLeft);}}Overridepublic void invalidate() {if (isLaidOut()) {super.invalidate();}}Overridepublic void draw(Canvas canvas) {if (helper ! null) {helper.draw(canvas, this);}super.draw(canvas);}Overrideprotected void onDraw(Canvas canvas) {if (helper ! null) {helper.onDraw(canvas, this);}super.onDraw(canvas);} }xml使用示例 包名.LabelFrameLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginLeft100dpandroid:layout_marginBottom10dpandroid:backgroundcolor/subColorGrayapp:borderColorcolor/redapp:borderWidth1dpandroid:radius20dpTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text阿迪斯发斯蒂芬 //包名.LabelFrameLayout
http://www.sadfv.cn/news/119867/

相关文章:

  • 钓鱼网站制作教程邦策网站建设
  • 长沙正规网站建设价格网站建设推推蛙
  • 优秀电商设计网站有哪些阿里云增加网站
  • 成都建设网站那家好广州站在哪个区
  • 网站建设写代码自己怎么创业企业咨询公司是做什么的
  • 龙华网站建设服务wordpress模板电商
  • 客户在我这做的网站被罚济南市章丘区建设局网站
  • 世界杯消息哪个门户网站做的好五站合一网站建设
  • 阿里云网站备案好了 怎么建站网站内容不显示
  • 五泉山网页设计宣传网站制作微信兼职网站开发
  • 网站建设美橙wordpress导入UI框架
  • phpcms手机网站模板一条龙网站建设哪家好
  • 南京一站式工程装饰装修网站绍兴本地网站建设
  • 十里堡网站建设图库
  • 英文网站建设580肇庆网站开发
  • 宝塔面板windows建站教程中小型网站建设教程
  • 网站怎么做gps定位wordpress注册显示密码
  • 使用wordpress在ec2上建网站cent7.4安装wordpress
  • 学做网站要学什么东西王占山
  • 沙县建设局网站网站建设工作室创业计划书
  • 有哪些站内推广的方式做dj网站需要
  • 网站快速注册在线制作图片渐变色
  • 淘宝网站怎么建设恐怖音乐怎么做的视频网站
  • 广州建网站多少钱python源码之家
  • 三门峡设计公司官网画质优化app下载
  • 网站优化待遇百度云网站开发
  • 网站设计 加英文费用网站建设和运营的教程
  • 新闻类网站建设邯郸市住建局官网
  • wordpress付费商业站公司章程范本
  • 网站开发外包项目网站网站建设交易平台