...直线、弧、圆、椭圆、文字、矩形、多边形、曲线。。。

Android利⽤canvas画各种图形(点、直线、弧、圆、椭圆、⽂字、矩形、多边
形、曲线。。。
1、⾸先说⼀下canvas类:这个类相当于⼀个画布,你可以在⾥⾯画很多东西;
我们可以把这个Canvas理解成系统提供给我们的⼀块内存区域(但实际上它只是⼀套画图的API,真正的内存是下⾯的Bitmap),⽽且它还提供了⼀整套对这个内存区域进⾏操作的⽅法,所有的这些操作都是画图API。也就是说在这种⽅式下我们已经能⼀笔⼀划或者使⽤Graphic来画我们所需要的东西了,要画什么要显⽰什么都由我们⾃⼰控制。
这种⽅式根据环境还分为两种:⼀种就是使⽤普通View的canvas画图,还有⼀种就是使⽤专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义⼀个专门的线程来完成画图⼯作,应⽤程序不需要等待View的刷图,提⾼性能。前⾯⼀种适合处理量⽐较⼩,帧率⽐较⼩的动画,⽐如说象棋游戏之类的;⽽后⼀种主要⽤在游戏,⾼品质动画⽅⾯的画图。
下⾯是Canvas类常⽤的⽅法:
drawRect(RectF rect, Paint paint) //绘制区域,参数⼀为RectF⼀个区域
drawPath(Path path, Paint paint) //绘制⼀个路径,参数⼀为Path路径对象
电视机模具drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //贴图,参数⼀就是我们常规的Bitmap对象,参数⼆是源区域(这⾥是bitmap),参数三是⽬标区域(应该在canvas的位置和⼤⼩),参数四是Paint画刷对象,因为⽤到了缩放和拉伸的可能,当原始Rect不等于⽬标Rect时性能将会有⼤幅损失。
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //画线,参数⼀起始点的x轴位置,参数⼆起始点的y轴位置,参数三终点的x轴⽔平位置,参数四y轴垂直位置,最后⼀个参数为Paint 画刷对象。
drawPoint(float x, float y, Paint paint) //画点,参数⼀⽔平x轴,参数⼆垂直y轴,第三个参数为Paint对象。止吠项圈
drawText(String text, float x, floaty, Paint paint) //渲染⽂本,Canvas类除了上⾯的还可以描绘⽂字,参数⼀是String类型的⽂本,参数⼆x轴,参数三y轴,参数四是Paint对象。
drawOval(RectF oval, Paint paint)//画椭圆,参数⼀是扫描区域,参数⼆为paint对象;
drawCircle(float cx, float cy, float radius,Paint paint)// 绘制圆,参数⼀是中⼼点的x轴,参数⼆是中⼼点的y轴,参数三是半径,参数四是paint对象;
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//画弧,
参数⼀是RectF对象,⼀个矩形区域椭圆形的界限⽤于定义在形状、⼤⼩、电弧,参数⼆是起始⾓(度)在电弧的开始,
参数三扫描⾓(度)开始顺时针测量的,参数四是如果这是真的话,包括椭圆中⼼的电弧,并关闭它,如果它是假这将是⼀个弧线,参数五是Paint对象;
还要理解⼀个paint类:
Class Overview
激光投影键盘The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
paint类拥有风格和颜⾊信息如何绘制⼏何学,⽂本和位图。
Paint 代表了Canvas上的画笔、画刷、颜料等等;
Paint类常⽤⽅法:
setARGB(int a, int r, int g, int b) // 设置 Paint对象颜⾊,参数⼀为alpha透明值
setAlpha(int a) // 设置alpha不透明度,范围为0~255
setAntiAlias(boolean aa) // 是否抗锯齿
setColor(int color) // 设置颜⾊,这⾥Android内部定义的有Color类包含了⼀些常见颜⾊定义
setTextScaleX(float scaleX) // 设置⽂本缩放倍数,1.0f为原始
setTextSize(float textSize) // 设置字体⼤⼩
setUnderlineText(booleanunderlineText) // 设置下划线
2、直接看案例
看⼀下效果图:
Android利⽤canvas画各种图形(点、直线、弧、圆、椭圆、⽂字、矩形、多边形、曲线、圆⾓矩形)
在此案例中我们⽤到的是⾃定义view类;
CustomActivity.java
public class CustomActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
init();
}
private void init() {
LinearLayout layout=(LinearLayout) findViewById();
包覆胶水
真空泵叶片final DrawView view=new DrawView(this);
view.setMinimumHeight(500);
view.setMinimumWidth(300);
/
/通知view组件重绘
view.invalidate();
layout.addView(view);
}
}
重要的类⾃定义View组件要重写View组件的onDraw(Canvase)⽅法,接下来是在该 Canvas上绘制⼤量的⼏何图形,点、直线、弧、圆、椭圆、⽂字、矩形、多边形、曲线、圆⾓矩形,等各种形状!
DrawView.java
public class DrawView extends View {
public DrawView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
// 创建画笔
// 创建画笔
Paint p = new Paint();
p.setColor(Color.RED);// 设置红⾊
canvas.drawText("画圆:", 10, 20, p);// 画⽂本
canvas.drawCircle(60, 20, 10, p);// ⼩圆
p.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,⼤家⼀看效果就明⽩了
canvas.drawCircle(120, 20, 20, p);// ⼤圆
canvas.drawText("画线及弧线:", 10, 60, p);
p.setColor(Color.GREEN);// 设置绿⾊
canvas.drawLine(60, 40, 100, 40, p);// 画线
canvas.drawLine(110, 40, 190, 80, p);// 斜线
//画笑脸弧线
p.setStyle(Paint.Style.STROKE);//设置空⼼
RectF oval1=new RectF(150,20,180,40);
canvas.drawArc(oval1, 180, 180, false, p);//⼩弧形
oval1.set(190, 20, 220, 40);
canvas.drawArc(oval1, 180, 180, false, p);//⼩弧形
文字拼接
oval1.set(160, 30, 210, 60);
canvas.drawArc(oval1, 0, 180, false, p);//⼩弧形
canvas.drawText("画矩形:", 10, 80, p);
p.setColor(Color.GRAY);// 设置灰⾊
p.setStyle(Paint.Style.FILL);//设置填满
canvas.drawRect(60, 60, 80, 80, p);// 正⽅形
canvas.drawRect(60, 90, 160, 100, p);// 长⽅形
canvas.drawText("画扇形和椭圆:", 10, 120, p);
Shader mShader = new LinearGradient(0, 0, 100, 100,
new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,
Color.LTGRAY }, null, Shader.TileMode.REPEAT); // ⼀个材质,打造出⼀个线性梯度沿著⼀条线。
p.setShader(mShader);
/
/ p.setColor(Color.BLUE);
RectF oval2 = new RectF(60, 100, 200, 240);// 设置个新的长⽅形,扫描测量
canvas.drawArc(oval2, 200, 130, true, p);
// 画弧,第⼀个参数是RectF:该类是第⼆个参数是⾓度的开始,第三个参数是多少度,第四个参数是真的时候画扇形,是假的时候画弧线    //画椭圆,把oval改⼀下
oval2.set(210,100,250,130);
canvas.drawOval(oval2, p);
canvas.drawText("画三⾓形:", 10, 200, p);
// 绘制这个三⾓形,你可以绘制任意多边形
Path path = new Path();
path.lineTo(120, 250);
path.lineTo(80, 250);
path.close(); // 使这些点构成封闭的多边形
canvas.drawPath(path, p);
// 你可以绘制很多任意多边形,⽐如下⾯画六连形
p.setColor(Color.LTGRAY);
p.setStyle(Paint.Style.STROKE);//设置空⼼
Path path1=new Path();
path1.lineTo(200, 200);
path1.lineTo(210, 210);
path1.lineTo(200, 220);
path1.lineTo(180, 220);
path1.lineTo(170, 210);
path1.close();//封闭
canvas.drawPath(path1, p);
//画圆⾓矩形
p.setStyle(Paint.Style.FILL);//充满
p.setColor(Color.LTGRAY);
p.setAntiAlias(true);// 设置画笔的锯齿效果
canvas.drawText("画圆⾓矩形:", 10, 260, p);
RectF oval3 = new RectF(80, 260, 200, 300);// 设置个新的长⽅形
canvas.drawRoundRect(oval3, 20, 15, p);//第⼆个参数是x半径,第三个参数是y半径
//画贝塞尔曲线
canvas.drawText("画贝塞尔曲线:", 10, 310, p);
p.setStyle(Paint.Style.STROKE);
p.setColor(Color.GREEN);
Path path2=new Path();
path2.quadTo(150, 310, 170, 400); //设置贝塞尔曲线的控制点坐标和终点坐标
canvas.drawPath(path2, p);//画出贝塞尔曲线
//画点
p.setStyle(Paint.Style.FILL);
canvas.drawText("画点:", 10, 390, p);
canvas.drawPoint(60, 390, p);//画⼀个点
canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//画多个点
//画图⽚,就是贴图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, 250,360, p);
}
}
ok!哈哈!
今天要给⼤家介绍的是在android中画饼图:
画扇形:
RectF oval2 = new RectF(60, 100, 200, 240);
// 设置个新的长⽅形,60为左上点的x坐标,100为左上点的y坐标;200为右下点的 x坐标,240为右下点的y坐标。
// 画弧,第⼀个参数是RectF:该类是第⼆个参数是⾓度的开始,第三个参数是多少度,第四个参数是真的时候画扇形,是假的时候画弧线
canvas.drawArc(oval2, 200, 130, true, p);
⼀、 ⽆⽹情况下:
由于Android 画图API为提供直接画饼图的⽅法,采⽤了⽐较原始的⽅法,画扇形,然后拼接在⼀起,由于为了显⽰⽴体效果,程序画了20次,每次改变上下的位置,结果看起来就会有⽴体感(如果谁有更好的⽅式,⾮常愿意学习)
canvas.drawArc(new RectF(0, 0, 300, 100), 0,60, true, paint);
会画⼀个宽300,⾼100,⽔平 顺时针⽅向的60度的扇形,程序中就是⽤这种⽅式拼接成整个饼图的.
Android利⽤canvas画各种图形(点、直线、弧、圆、椭圆、⽂字、矩形、多边形、曲线、圆⾓矩形)
我们已经介绍了Canvas,在那⾥,已经学习了如何创建⾃⼰的View。在第7章中也使⽤了Canvas来为MapView标注覆盖。
画布(Canvas)是图形编程中⼀个很普通的概念,通常由三个基本的绘图组件组成:
Canvas 提供了绘图⽅法,可以向底层的位图绘制基本图形。
Paint 也称为"刷⼦",Paint可以指定如何将基本图形绘制到位图上。
Bitmap 绘图的表⾯。
Android绘图API⽀持透明度、渐变填充、圆边矩形和抗锯齿。遗憾的是,由于资源限制,它还不⽀持⽮量图形,它使⽤的是传统光栅样式的重新绘图。
这种光栅⽅法的结果是提⾼了效率,但是改变⼀个Paint对象不会影响已经画好的基本图形,它只会影响新的元素。
提⽰:
如果你拥有Windows开发背景,那么Android的2D绘图能⼒⼤致相当于GDI+的能⼒。
1. 可以画什么?
Canvas类封装了⽤作绘图表⾯的位图;它还提供了draw*⽅法来实现设计。
下⾯的列表提供了对可⽤的基本图形的简要说明,但并没有深⼊地探讨每⼀个draw⽅法的详细内容:
drawARGB / drawRGB / drawColor  使⽤单⼀的颜⾊填充画布。
drawArc  在⼀个矩形区域的两个⾓之间绘制⼀个弧。
drawBitmap  在画布上绘制⼀个位图。可以通过指定⽬标⼤⼩或者使⽤⼀个矩阵来改变⽬标位图的外观。
drawBitmapMesh  使⽤⼀个mesh(⽹)来绘制⼀个位图,它可以通过移动⽹中的点来操作⽬标的外观。
drawCircle  以给定的点为圆⼼,绘制⼀个指定半径的圆。
drawLine(s)  在两个点之间画⼀条(多条)直线。
drawOval  以指定的矩形为边界,画⼀个椭圆。
drawPaint  使⽤指定的Paint填充整个Canvas
drawPath  绘制指定的Path。Path对象经常⽤来保存⼀个对象中基本图形的集合。
drawPicture  在指定的矩形中绘制⼀个Picture对象。
drawPosText  绘制指定了每⼀个字符的偏移量的⽂本字符串。
drawRect  绘制⼀个矩形。
drawRoundRect  绘制⼀个圆⾓矩形。
drawText  在Canvas上绘制⼀个⽂本串。⽂本的字体、⼤⼩和渲染属性都设置在⽤来渲染⽂本的Paint对象中。
drawTextOnPath  在⼀个指定的path上绘制⽂本。
drawVertices  绘制⼀系列三⾓形⾯⽚,通过⼀系列顶点来指定它们。
这些绘图⽅法中的每⼀个都需要指定⼀个Paint对象来渲染它。在下⾯的部分中,将学习如何创建和修改Paint对象,从⽽在绘图中完成⼤部分⼯作。
2. 从Paint中完成⼯作
Paint类相当于⼀个笔刷和调⾊板。它可以选择如何使⽤上⾯描述的draw⽅法来渲染绘制在画布上的基本图形。通过修改Paint对象,可以在绘图的时候控制颜⾊、样式、字体和特殊效果。最简单地,setColor可以让你选择⼀个Paint的颜⾊,⽽Paint对象的样式(使⽤setStyle控制)则可以决定是绘制绘图对象的轮廓(S TROKE),还是只填充每⼀部分(FILL),或者是两者都做(STROKE_AND_FILL)
除了这些简单的控制之外,Paint类还⽀持透明度,另外,它也可以通过使⽤各种各样的阴影、过滤器和效果进⾏修改,从⽽提供由更丰富的、复杂的画笔和颜料组成的调⾊板。
Android SDK包含了⼀些⾮常好的实例,它们说明了Paint类中可⽤的⼤部分功能。你可以在API demos的graphics⼦⽬录中到它们:
sdk root folder]\samples\ApiDemos\src\com\android\samples\graphics
在下⾯的部分中,将学习和使⽤其中的部分功能。这些部分只是简单地罗列了它们能实现的效果(例如渐变和边缘浮雕),⽽没有详细地列出所有可能的情况。
使⽤透明度
Android中的所有颜⾊都包含了⼀个不透明组件(alpha通道)。
当创建⼀个颜⾊的时候,可以使⽤argb或者parseColor⽅法来定义它的alpha值,如下所⽰:
Java代码:
// 使⽤红⾊,并让它50%透明
int opacity = 127;
int intColor = Color.argb(opacity, 255, 0, 0);
int parsedColor = Color.parseColor("#7FFF0000");

本文发布于:2024-09-22 16:45:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/344647.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   绘制   对象   矩形
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议