javaFX学习之canvas画布api简单介绍(转载)

原文链接:DOC-02-09 使用Canvas API | JavaFX中文资料

Canvas初始设置宽300高250,然后通过调用canvas.getGraphicsContext2D()方法获得了它的GraphicsContext。随后通过调用strokeLine、fillOval、strokeArc和fillPolygon等方法执行了一系列基本绘图操作

上代码:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcType;
import javafx.stage.Stage;

public class BasicOpsTest extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("画图操作测试");
        Group root = new Group();//创建一个跟容器节点
        Canvas canvas = new Canvas(300, 250);//创建一个帆布画
        GraphicsContext gc = canvas.getGraphicsContext2D();//获取绘画上下文环境对象,获取绘画小宇宙
        drawShapes(gc);//调用自定义具体绘画流程方法,绘制图形
        root.getChildren().add(canvas);//将根节点容器上添加帆布画
        primaryStage.setScene(new Scene(root));//舞台设置场景,场景挂载节点容器
        primaryStage.show();// 舞台展现
    }

    private void drawShapes(GraphicsContext gc) {//绘画上下文环境对象,在这个系列api中有点画笔对象那意思
        gc.setFill(Color.GREEN);//绘画上下文填充绿色,给画笔的填充作用属性填充颜料为绿色
        gc.setStroke(Color.BLUE);//绘画上下文设置线型和颜色,给画笔的线性绘画笔筒内填充蓝色颜料
        gc.setLineWidth(1);//绘画上下文设置线条粗细
        gc.strokeLine(100, 10, 10, 10);//根据对应坐标参数划线,起点坐标(x1,y1),重点坐标(x2,y2)
        gc.fillOval(10, 60, 30, 30);//画一个填充型椭圆,参数分别是(x,y),宽w,和高h
        gc.strokeOval(60, 60, 30, 30);//画一个线状型椭圆,参数分别是(x,y),宽w,和高h
        gc.fillRoundRect(110, 60, 30, 30, 10, 10);//画一个圆填充型角矩形
        gc.strokeRoundRect(160, 60, 30, 30, 10, 10);//画一个线性状圆角矩形
        gc.fillArc(10, 110, 30, 30, 45, 240, ArcType.OPEN);//创建填充式拱形
        gc.fillArc(60, 110, 30, 30, 45, 240, ArcType.CHORD);//创建填充式拱形
        gc.fillArc(110, 110, 30, 30, 45, 240, ArcType.ROUND);//创建填充式原型拱形
        gc.strokeArc(10, 160, 30, 30, 45, 240, ArcType.OPEN);
        gc.strokeArc(60, 160, 30, 30, 45, 240, ArcType.CHORD);
        gc.strokeArc(110, 160, 30, 30, 45, 240, ArcType.ROUND);
        gc.fillPolygon(new double[]{10, 40, 10, 40},
                new double[]{210, 210, 240, 240}, 4);//创建填充式多边形
        gc.strokePolygon(new double[]{60, 90, 60, 90},
                new double[]{210, 210, 240, 240}, 4);//创建线性多边形
        gc.strokePolyline(new double[]{110, 140, 110, 140},
                new double[]{210, 210, 240, 240}, 4);//创建多段线
    }
}

——————————————————

 

 

想要学好Canvas API,你只需要记住对应代码都基于对Canvas或GraphicsContext对象的调用。

这种模式分为五个主要部分。

首先,Canvas的位置被设置到坐标(0,0)处

并且对Canvas对象应用了一个变换。

例 移动Canvas

1

2

3

4

private void moveCanvas(int x, int y) {

    canvas.setTranslateX(x);

    canvas.setTranslateY(y);

}

你可以传入不同的参数值来将Canvas移动到新的位置。你所传入的参数值将会传递给setTranslateX和setTranslateY方法,并且Canvas会进行相应的移动。

其次,在屏幕上绘制了主要的形状(看起来像大写的字母”D”)。它通过调用GraphicsContext的bezierCurveTo方法绘制一条贝塞尔曲线而生成

 

在屏幕上绘制一条贝塞尔曲线(大写的”D”)

1

2

3

4

5

6

private void drawDShape() {

    gc.beginPath();

    gc.moveTo(50, 50);

    gc.bezierCurveTo(150, 20, 150, 150, 75, 150);

    gc.closePath();

}

你可以通过改变参数值来对这个形状进行试验。bezierCurveTo方法将会随着你的尝试对形状进行拉伸。

在此之后,一个红色和黄色的射线渐变(RadialGradient)提供了背景中的圆形图案

 

绘制一个RadialGradient

1

2

3

4

5

6

7

private void drawRadialGradient(Color firstColor, Color lastColor) {

    gc.setFill(new RadialGradient(0, 0, 0.5, 0.5, 0.1, true,

               CycleMethod.REFLECT,

               new Stop(0.0, firstColor),

               new Stop(1.0, lastColor)));

    gc.fill();

}

这里GraphicsContext的setFill方法接受了一个RadialGradient对象作为其参数。同样你可以尝试不同的值或者根据你的喜好传入不同的颜色。

一个线性渐变(LinearGradient)对自定义形状”D”进行了着色,使其从蓝色过渡绿色

 

绘制一个LinearGradient

1

2

3

4

5

6

7

8

9

private void drawLinearGradient(Color firstColor, Color secondColor) {

    LinearGradient lg = new LinearGradient(0, 0, 1, 1, true,

                        CycleMethod.REFLECT,

                        new Stop(0.0, firstColor),

                        new Stop(1.0, secondColor));

    gc.setStroke(lg);

    gc.setLineWidth(20);

    gc.stroke();

}

这段代码将GraphicsContext的笔触(Stroke)设置为使用LinearGradient,然后使用gc.stroke()对图案进行了渲染。

最后通过调用GraphicsContext对象的applyEffect方法提供了多种色彩的阴影

 

增加一个阴影

1

2

3

4

5

6

7

private void drawDropShadow(Color firstColor, Color secondColor,

                            Color thirdColor, Color fourthColor) {

    gc.applyEffect(new DropShadow(20, 20, 0, firstColor));

    gc.applyEffect(new DropShadow(20, 0, 20, secondColor));

    gc.applyEffect(new DropShadow(20, -20, 0, thirdColor));

    gc.applyEffect(new DropShadow(20, 0, -20, fourthColor));

}

所示,通过创建带有指定颜色的DropShadow对象,并将其传递给GraphicsContext对象的applyEffect方法在图形上应用了视觉效果

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值