• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 用Canvas画textview、bitmap、矩形(裁剪)、椭圆、线、点、弧

Android 用Canvas画textview、bitmap、矩形(裁剪)、椭圆、线、点、弧

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了canvas bitmap,canvas绘制bitmap,bitmapcanvasprovider,canvas转bitmap,android canvas等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 用Canvas画textview、bitmap、矩形(裁剪)、椭圆、线、点、弧


初始化对象

private Paint mPaint;//画笔
	private int count;//点击次数
	private Rect rect;//矩形
	public CounstomView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		//初始化画笔
		mPaint = new Paint();
		rect = new Rect();
		setOnClickListener(this);
	}

 

1.画textview。并且设置可点击。//渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。

String text = null;
	@SuppressLint("DrawAllocation") @Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//设置paint
		mPaint.setStyle(Style.FILL);//实心
		//mPaint.setColor(Color.BLUE);//黄色
		//mPaint.setAlpha(50);//透明度15
		canvas.drawColor(Color.YELLOW);
		canvas.drawRect(0, 0, getHeight(), getWidth(), mPaint);//画矩形
		
		mPaint.setColor(Color.RED);
		mPaint.setTextSize(25.0f);
		 text = String.valueOf(count);
		mPaint.getTextBounds(text, 0, text.length(), rect);//将内容的长和宽。添加到rect矩形中
		float width = rect.width();//获取宽
		float height = rect.height();
		canvas.drawText(text, getWidth() / 2  - width / 2, getHeight() / 2 + height/2, mPaint);//设置文本位置
//		
		
	}
	@Override
	public void onClick(View arg0) {
		count++;
		invalidate();//重绘
	}

 

2.画简单的bitmap。参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。

 

protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//偏左和偏上的位置
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.login_backgroud);
		canvas.drawBitmap(bitmap,0,0, mPaint);
		
	}

\

3.利用canvas.drawBitmap(bitmap, src, dst, paint)画裁剪过的bitmap//参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。

 

protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		// 偏左和偏上的位置
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
				R.drawable.login_backgroud);

		Paint paint = new Paint();
		canvas.save();
		// left----距离屏幕左侧距离。。。
		// top------距离顶部距离。。。
		// right-----矩形的宽度
		// buttom-----矩形的高度
		Rect rect = new Rect(10, 10, 500, 500);
		canvas.clipRect(rect); // 设置裁剪区域
		canvas.drawColor(Color.BLUE);// 裁剪区域的rect变为蓝色
		Rect rec = new Rect(20, 20, 300, 300);
		canvas.drawBitmap(bitmap, rect, rec, paint);
		
		canvas.restore();
	}


 

\


4:利用canvas.drawOval画椭圆。画椭圆,参数一是扫描区域,参数二为paint对象;

 

	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		// 偏左和偏上的位置
		Paint paint = new Paint();
		canvas.save();
		// left----距离屏幕左侧距离。。。A
		// top------距离顶部距离。。。B
		// right-----椭圆的宽度.....C
		// buttom-----椭圆的高度......D
		RectF dst = new RectF(10,10,300, 400);//2a=100-30,2b=310-260
		paint.setColor(Color.YELLOW);
		canvas.drawColor(Color.RED);
		canvas.drawOval(dst, paint);
		canvas.restore();
	}

\

5.利用canvas画点。//画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。

 

@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		canvas.save();
		canvas.drawColor(Color.RED);//有背景先画背景
		canvas.restore();
		
		canvas.save();
		paint.setColor(Color.BLACK);
		paint.setTextSize(20.0f);
		canvas.drawText("画点:", 10, 90, paint);//文本
		canvas.restore();

		canvas.save();
		paint.setColor(Color.GREEN);
		paint.setStrokeWidth(20.0f);//设置点的大小
		canvas.drawPoint(120, 90, paint);//参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。
//		canvas.drawPoints(new float[]{60,400,65,400,70,40}, paint);//画多个点
		canvas.restore();
		
		canvas.save();
		paint.setColor(Color.BLACK);
		paint.setStyle(Style.FILL);
		canvas.drawText("这样可以当圆点用么:", 10, 130, paint);
		
		paint.setAntiAlias(true);//去除抗锯齿
		paint.setColor(Color.YELLOW);
		canvas.drawCircle(120, 130, 10, paint);//参数一水平x轴,参数二垂直y轴,参数三圆半径,参数四Paint对象
		canvas.restore();
		
		
	}

\

 

 

6:画线。drawLine(float startX, float startY, float stopX, float stopY, Paintpaint)//参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint 画刷对象。

 

protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		canvas.drawColor(Color.YELLOW);
		paint.setAntiAlias(true);//抗锯齿
		paint.setDither(true);//抖动,让图形看起来没有毛边
		paint.setColor(Color.RED);
		paint.setStrokeWidth(3);//设置线的粗细
		canvas.drawLine(20, 50, 200, 100, paint);//参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint 画刷对象。
		
		
	}

\

 

 

7:画弧线:

参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电弧,参数二是起始角(度)在电弧的开始,

参数三扫描角(度)开始顺时针测量的,参数四是如果这是真的话,包括椭圆中心的电弧,并关闭它,如果它是假这将是一个弧线,参数五是Paint对象;


 

	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		canvas.drawColor(Color.BLUE);
		//画弧
		paint.setStyle(Style.STROKE);//设置空心
		paint.setColor(Color.RED);//设置颜色
		paint.setStrokeWidth(3);//设置粗细
		RectF oval = new RectF();
		oval.set(50, 50, 200, 200);
//		oval.contains(100, 55, 205, 205);
//		canvas.drawArc(oval, 180, 180, true, paint);
		canvas.drawArc(oval, 180, 180, false, paint);
		
	}
当为true时
canvas.drawArc(oval, 180, 180, true, paint);
\

 

当为false时

canvas.drawArc(oval, 180, 180, false, paint);
\

 

8:画多边形。path1.quadTo(x1, y1, x2, y2)//x1第一圈扭曲的x轴,y1第一圈扭曲的y轴。x2结束x轴位置,结束的y位置

 

protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		canvas.drawColor(Color.YELLOW);
		paint.setColor(Color.BLACK);
		paint.setTextSize(20);
		paint.setTextScaleX(0.5f);
		canvas.drawText("画多边形:", 50, 50, paint);
		
		paint.setColor(Color.RED);
		paint.setStrokeWidth(3);
		Path path = new Path();
		paint.setStyle(Style.STROKE);//设置空心
		path.moveTo(120, 50);//起点位置
		path.lineTo(190, 100);//第一条线
		path.lineTo(190, 50);//第二条线
		path.lineTo(120, 50);//第三条线
		path.close();//关闭
		canvas.drawPath(path, paint);
		
		Path path1 = new Path();
		paint.setColor(Color.BLUE);
//		path1.addPath(path);
		path1.moveTo(100, 150);//起始点
		path1.quadTo(10, 280, 10, 350);//
//		path1.quadTo(x1, y1, x2, y2)//x1第一圈扭曲的x轴,y1第一圈扭曲的y轴。x2结束x轴位置,结束的y位置
		
		path1.setLastPoint(90, 60);
		canvas.drawPath(path1, paint);
	}
<
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 用Canvas画textview、bitmap、矩形(裁剪)、椭圆、线、点、弧

相关文章

  • 2017-05-26Xamarin.Android 的照相機使用,xamarin.android
  • 2017-05-26Android——Listview不用notifydatasetchanged更新数据的方法,androidlistview更新
  • 2017-05-26Android 实用代码片段,
  • 2017-05-26菜鸟新闻2--设置沉浸式状态栏,新闻2--沉浸状态栏
  • 2017-05-26andriod 获取电池的信息,andriod获取电池
  • 2017-05-26android源码解析之(二)--)异步任务AsyncTask
  • 2017-05-26Android UI相关开源项目库汇总,android开源项目
  • 2017-05-26Android SDK镜像更新网速慢的解决问题,androidsdk
  • 2017-05-26Android(Linux)实时监测串口数据,android实时监测
  • 2017-05-26Android5.0开发范例大全 读书笔记(三),android5.0范例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微博API常用方法,博API常用方法
    • Android设计模式之单例模式的七种写法
    • 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩,深入理解java虚拟机
    • TextView,iostextview
    • Fragment,androidfragment
    • android:Activity启动模式之standard
    • Android自动化构建之Ant多渠道打包实践分析(上)
    • Android捕获崩溃异常,Android捕获崩溃
    • Android—ZXing二维码扫描遇到的问题,androidzxing
    • 继承ViewGroup学习onMeasure()和onLayout()方法,viewgrouponmeasure

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有