android+drawrect边框,drawRect:绘图
drawRect:绘图
作用:专门用来绘图 什么时候调用:当View显示的时候调用(ViewWillAppear和ViewDidAppear之间) 参数rect:当View的bounds 在drawRect方法当中系统已经帮你创建一个跟View相关联的上下文(Layer上下文),只要获取上下文就可以了
带有边框的图片裁剪
步骤:
1.假设边框宽度为BorderW
2.开启的图片上下文的尺寸就应该是原始图片的宽高分别加上两倍的BorderW,这样开启的目的是为了不让原始图片变形.
3.在上下文上面添加一个圆形填充路径.位置从0,0点开始,宽高和上下文尺寸一样大.设置颜色为要设置的边框颜色.
4.继续在上下文上面添加一个圆形路径,这个路径为裁剪路径. 它的x,y分别从BorderW这个点开始.宽度和高度分别和原始图片的宽高一样大. 将绘制的这个路径设为裁剪区域.
5.把原始路径绘制到上下文当中.绘制的位置和是裁剪区域的位置相同,x,y分别从border开始绘制.
6.从上下文状态当中取出图片.
7.关闭上下文状态.
代码实现
//
// UIImage+image.h
#import
@interface UIImage (image)
/**
根据传入的图片,生成一终带有边框的圆形图片
参数:边框宽度,边框颜色,原始图片
*/
+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image;
@end
//
// UIImage+image.m
#import "UIImage+image.h"
@implementation UIImage (image)
/**
根据传入的图片,生成一终带有边框的圆形图片
参数:边框宽度,边框颜色,原始图片
*/
+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image{
//1.开启一个和原始图片一样大小的位图上下文.
CGSize size = CGSizeMake(image.size.width + 2 *borderW, image.size.height + 2 * borderW);
UIGraphicsBeginImageContextWithOptions(size,NO,0);
//2.绘制一个大圆,填充
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];
[color set];
[path fill];
//3.添加一个裁剪区域.
path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
[path addClip];
//4.把图片绘制到裁剪区域当中.
[image drawAtPoint:CGPointMake(borderW, borderW)];
//5.生成一张新图片.
UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();
//6.关闭上下文.
UIGraphicsEndImageContext();
return clipImage;
}
@end
1.drawRect:基本使用
自定义绘图View的步骤 新建一个类,继承UIView 实现drawRect:方法,然后在这个方法里写(4点) 1.获取上下文 2.描述路径 3.把描述路径添加到上下文当中 4.把上下文的内容显示到View上(渲染到View的Layer上)
drawLine画直线
// 画直线
- (void)drawLine{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.描述路径
UIBezierPath *path = [UIBezierPath bezierPath];
// 设置起点 + 添加一根线到终点
[path moveToPoint:CGPointMake(50, 280)];
[path addLineToPoint:CGPointMake(250, 50)];
// 画第二条线
[path addLineToPoint:CGPointMake(200, 280)];
// 上下文的状态
// 设置线宽
CGContextSetLineWidth(ctx, 10);
// 设置线的连接样式
CGContextSetLineJoin(ctx, kCGLineJoinRound);
// 设置线的顶角样式
CGContextSetLineCap(ctx, kCGLineCapRound);
// 设置颜色
[[UIColor redColor] set];
// 3.把描述的内容添加到上下文
// UIBezierPath:UIKit框架 ,CGPathRef:CoreGraphics框架
CGContextAddPath(ctx, path.CGPath);
// 4.把上下文内容显示到View上(渲染到View的layer)
CGContextStrokePath(ctx);
}
drawCurve画曲线
// 画曲线
- (void)drawCurve{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.描述路径
UIBezierPath *path = [UIBezierPath bezierPath];
// 画曲线(controlPoint:弯曲方向点)
[path moveToPoint:CGPointMake(50, 280)];
[path addQuadCurveToPoint:CGPointMake(250, 280) controlPoint:CGPointMake(50, 50)];
// 3.把描述内容添加到上下文当中
CGContextAddPath(ctx, path.CGPath);
// 4.把上下文的内容显示到View上(渲染到View的layer上)
// 渲染两种方式(Stroke路径渲染,Fill内容渲染)
android+drawrect边框,drawRect:绘图相关推荐
- android 底边框_Android底表
android 底边框 In this tutorial we'll discuss and implement android Bottom Sheet widget that was introd ...
- android的边框设置
android的边框设置 前端页面中的页面元素都会有边框, html中可以通过border设置边框, android设置元素的边框需要在背景图元素中进行设置: 实现方式一: 实现代码: 在drawab ...
- android 设置边框圆角
android 设置边框圆角 public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitma ...
- android带边框的RelativeLayout
android带边框的RelativeLayout 概述 代码实现 概述 这个是小众需求,主要用于某些需要手动控制边框线是否显示的场景,例如底层通过数据参数的形式,配置边框显示的形式.多用于基于c语言 ...
- android自定义阴影,Android自定义边框加阴影
一.前言 Android自定义边框,可以设置任意边框的角度和阴影.我下面分为 四个角度设置边框.两个角度设置边框.半圆球设置边框加两层阴影等. 二.边框分类: 1.四个角度设置边框 效果图: 图片.p ...
- Android使用学习之绘图(Canvas,Paint)与手势感应及其应用(乒乓球小游戏)
作为一个没有学习Android的菜鸟,最近一直在工作之外努力地学习的Android的使用.这周看了下Android的绘图,主要是Canvas,Paint等,感觉需要实践下,下午正好有空,就想整一个乒乓 ...
- Android中级——屏幕和绘图
屏幕和绘图 屏幕 系统屏幕密度 独立像素密度dp 单位转换 XML绘图(需放在Drawable) Bitmap Shape Layer Selector 绘图技巧 Canvas Layer Porte ...
- android虚线边框_android 绘制虚线效果
有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种: 一.自己创建模式,一个点一个点的绘制. 二.用Android提供的 Das ...
- android虚线边框_Android实现代码画虚线边框背景效果
实现如下边框效果: 虚线画效果,可以使用Android中的xml来做.下面话不多说,直接上代码: android:id="@+id/coupon_popup" android:la ...
最新文章
- 兔子生兔子递归的理解
- DevExpress TreeList 调优_绑定数据源方式, 放弃原来的AppendNode加载数据的方式
- Storm WordCount
- python起步输入-[转载]python核心编程学习笔记-python起步
- Oracle-修改用户密码为UNLIMITED
- Oracle添加定时任务
- 【收藏】Vue中ref和$refs的介绍及使用
- JSP第十四次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品
- 常见优化Sql查询性能的方法收集
- client mysql 逗号_mysql comment line client(MySQL命令行常用操作)
- BGP——community团体属性(讲解+配置)@
- vscode格式化 java_VS CODE中配置JAVA格式化细节
- linux文件系统的总体架构,Linux NFS的整体架构与核心代码解析
- 大数据可视化平台优点在哪
- matlab数据栅格化,新手求卫星降水数据CMORPH_V1.0数据完整处理方法,有matlab打开的代码但是不会处理...
- 常见的Python解释器,你了解多少?
- 朽木第一至三季/全集Deadwood迅雷下载
- 报错:WebMvcConfigurer.class cannot be opened because it does not exist
- linux 渗透 系统,初识Linux渗透:从枚举到内核利用
- 除了摆地摊or送外卖,程序猿如何体面的赚零花钱?