安卓 View绘图笔记


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;

public class CustomView extends View {

	private Paint paint = new Paint();
	
	private Path path1 = new Path();
	private Path path2 = new Path();
	private Path path3 = new Path();
	
	private RectF rectf1 = new RectF(50, 50, 100, 100);
	
	private Shader mShasder = new LinearGradient(0, 0, 40, 60, new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW}, null, Shader.TileMode.REPEAT);
	
	public CustomView(Context context) {
		super(context);
		
	}
	
	public CustomView(Context context, AttributeSet attrs) {
		super(context, attrs, 0);
	}
	 
	public CustomView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		
		super.onDraw(canvas);
		
		canvas.drawARGB(50, 200, 120, 120);
		
		//去锯齿   
        paint.setAntiAlias(true);  
        //设置线宽度
        paint.setStrokeWidth(3); 
		
		paint.setARGB(255, 200, 100, 150);
		canvas.drawRect(this.getWidth()/2-10, this.getHeight()/2-10, this.getWidth()/2+10, this.getHeight()/2+10, paint);
		canvas.drawLine(0, 0, this.getWidth(), this.getHeight(), paint);
		canvas.drawLine(this.getWidth(), 0, 0, this.getHeight(), paint);
		
		
		
		//绘制三角形
		path1.moveTo(10, 340);
		path1.lineTo(70, 340);
		path1.lineTo(40, 290);
		path1.close();
		canvas.drawPath(path1, paint);
		
		//绘制五边形
		path2.moveTo(150, 340);
		path2.lineTo(210, 340);
		path2.lineTo(210, 290);
		path2.lineTo(180, 260);
		path2.lineTo(150, 290);
		path2.close();
		canvas.drawPath(path2, paint);
		
		//绘制五角星
		path3.moveTo(250, 50);
		path3.lineTo(240, 74);
		path3.lineTo(220, 74);
		path3.lineTo(240, 86);
		path3.lineTo(230, 110);
		path3.lineTo(250, 94);
		path3.lineTo(270, 110);
		path3.lineTo(260, 86);
		path3.lineTo(280, 74);
		path3.lineTo(260, 74);
		path3.close();
		canvas.drawPath(path3, paint);
		
		//设置渐变器后绘制   
        //为Paint设置渐变器  
        paint.setShader(mShasder);  
        //设置阴影   
        paint.setShadowLayer(45, 10, 10, Color.GRAY); 
        //绘制圆角矩形
      	canvas.drawRoundRect(rectf1, 15, 15, paint);
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了python应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: QGraphicsView是一个用于显示和编辑2D图形项的视图类。它是Qt图形框架中的一部分,可以与QGraphicsScene和QGraphicsItem一起使用。 QGraphicsScene是一个场景类,可以包含图形项并管理它们的布局和行为。QGraphicsItem则是图形项的基类,包含了绘制和事件处理的功能。QGraphicsView可以将QGraphicsScene中的图形项显示在窗口中,并提供用户交互和导航的功能。 QGraphicsView绘图功能主要通过重写绘制事件来实现。可以通过重新实现QGraphicsView的paintEvent函数来实现自定义绘制操作。在paintEvent函数中,可以使用QPainter类来进行2D图形绘制,包括线条、矩形、椭圆等。此外,还可以使用QGraphicsItem的各种派生类来绘制更复杂的图形项,如文本、路径、像素图等。 除了绘图,QGraphicsView还提供了一些其他功能。例如,可以通过QGraphicsView的setViewportUpdateMode函数来控制视图的更新模式,以提高绘图的性能。还可以使用setScene函数将QGraphicsScene对象设置为视图的场景,从而显示和编辑图形项。此外,还可以通过一些函数来控制视图的缩放、平移和旋转等操作,以实现图形的交互和导航。 总之,QGraphicsView是一个强大的绘图工具,可以实现各种2D图形的绘制和交互。通过结合QGraphicsScene和QGraphicsItem,可以创建出各种复杂的图形应用程序。 ### 回答2: QGraphicsView 是 Qt 中的一个图形视图框架,可以用于绘制和显示2D图形、展示动画、提供交互功能等。它是基于“场景-视图模型”的设计思想,将场景中的图形对象显示在视图上。 通过 QGraphicsScene,我们可以创建一个场景,用于管理图形对象。QGraphicsView 则是用来显示这个场景的视图,可以在其中进行缩放、平移等操作。 通过 QGraphicItem 类及其派生类,我们可以创建各种图形对象,并设置其属性和行为。例如,可以创建矩形、椭圆、路径、文本等图形对象,并设置颜色、边框、填充等属性。 在绘制图形时,我们需要将图形对象添加到场景中,并设置图形的位置、大小等属性。然后,将场景设置给 GraphicsView,通过 GraphicsView 的 setScene() 方法来显示场景。 QGraphicsView 还提供了一些有用的功能,例如,支持鼠标和键盘事件的处理,可以通过重写相关函数来实现交互操作;它还可以方便地进行视图的缩放和平移,通过 setTransform() 方法可以进行缩放操作,通过 translate() 和 rotate() 方法可以进行平移和旋转操作。 总结来说,QGraphicsView 提供了一个方便、灵活的绘图框架,可以帮助我们在 Qt 应用程序中进行2D图形的绘制和显示。 ### 回答3: QGraphicsView是Qt中用于绘图的一个重要的类。它可以让开发者方便地创建和管理图形场景,并支持对图形的平移、缩放和旋转等操作。 首先,我们需要创建一个QGraphicsView对象,并设置其场景。场景是存放图形对象的容器,我们可以在场景中添加、移除和管理图形项。 通过调用QGraphicsView的setScene()方法,将我们创建的场景设置给QGraphicsView对象。然后,我们可以在场景中添加各种图形项,如矩形、椭圆、文字等。 在绘制图形项时,我们可以通过继承QGraphicsItem类,并重写其paint()方法来自定义我们的图形项。在paint()方法中,我们可以使用QPainter来绘制各种形状和样式的图形。 除了绘制图形项,QGraphicsView还提供了各种交互功能。比如,我们可以通过实现mousePressEvent()、mouseMoveEvent()和mouseReleaseEvent()等事件来实现对图形的拖拽和放大缩小。 此外,QGraphicsView还能处理滚轮事件,通过重写wheelEvent()方法,我们可以实现对图形的缩放功能。 除了图形的平移、缩放和旋转,QGraphicsView还支持对图形项的选择、移动和删除等操作。我们可以通过调用QGraphicsView的相关方法,对选择的图形项进行操作。 总的来说,QGraphicsView是Qt中一个非常强大和灵活的绘图类。它提供了丰富的绘图和交互功能,可以帮助我们实现各种精美的绘图效果,并提升用户体验。无论是绘制简单的图形还是复杂的图形,QGraphicsView都能满足我们的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值