Android基础复习2D图形二,自学Android

本文介绍了作者使用Android进行2D图形绘制的实践,包括图形渲染的运用、圆边线条绘制、拖动功能实现以及使用canvas的save()和clipRect()方法。同时提到了设计模式的学习资源作为进阶参考。
摘要由CSDN通过智能技术生成

前天复习了简单的2D图形入门,今天正好练习一下2D绘图;绘制了一个简单的图形如下 ;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个小太阳是可以进行拖动的,点击在太阳外面还可以进行图形绘制,只是当太阳拖过的地方都会被清除……这个只是做为新手练习2D图形绘制:下面讲一下所用到的一些知识点:

1、图形渲染:

这个功能在这里用得很少,只是在绘制圆的时候,体现出来,从中心到外面黄色到白色的渐变是用的 渲染 ,代码如下

// 设置paint的渲染效果,如果想设置复合效果 ComposeShader,组合其它的Shader

shader = new RadialGradient(circle_cx, circle_cy, CIRCLE_RADIUS,

Color.YELLOW, Color.WHITE, TileMode.CLAMP);

paint.setShader(shader);

// 画圆

canvas.drawCircle(circle_cx, circle_cy, CIRCLE_RADIUS, paint);

// 取消shader效果。

paint.setShader(null);

2、绘制圆边上的线条,是用的一个循环,用了一点点简单的Math里面的方法。代码如下:

// 绘制光环

int x1, y1;

int x2, y2;

int i = DENSITY;

//每角度加为DENSITY的时候,就绘制一条线。

while (i <= 360) {

x1 = (int) (CIRCLE_CY_HALO_RADIUS1 * Math.cos(i * Math.PI / 180))

  • circle_cx;

y1 = (int) (CIRCLE_CY_HALO_RADIUS1 * Math.sin(i * Math.PI / 180))

  • circle_cy;

x2 = (int) (CIRCLE_CY_HALO_RADIUS2 * Math.cos(i * Math.PI / 180))

  • circle_cx;

y2 = (int) (CIRCLE_CY_HALO_RADIUS2 * Math.sin(i * Math.PI / 180))

  • circle_cy;

canvas.drawLine(x1, y1, x2, y2, paint);

i += DENSITY;

}

3、在画布的其它地方点击拖动可以进行绘制;这个功能很简单,只是监听touch事件,拖动的时候绘制线条就可以了。

// 点击为太阳之内的时候,就标志才可以进行拖动 。

if (flag) {

// canvas.drawColor(Color.BLACK);//清全屏

// 下面当手动太阳的时候,只清除太阳周围的颜色,这样太阳就不会重复 了。

canvas.save();

canvas.clipRect(circle_cx - CIRCLE_CY_HALO_RADIUS2, circle_cy

  • CIRCLE_CY_HALO_RADIUS2, circle_cx
  • CIRCLE_CY_HALO_RADIUS2, circle_cy

  • CIRCLE_CY_HALO_RADIUS2);

canvas.drawColor(Color.BLACK);

canvas.restore();

circle_cx = (int) event.getX();

circle_cy = (int) event.getY();

drawSun();

iv_img.postInvalidate();

} else {

// 当移动外面的时候,绘制线条

canvas.drawLine(ox, oy, event.getX(), event.getY(), paint);

ox = event.getX();

oy = event.getY();

iv_img.postInvalidate();

}

break;

4、拖动太阳的时候,不全屏清除,只清除太阳的边缘。这个用到了canvas.save(),canvas.clipRect()方法,局部绘制;

// 下面当手动太阳的时候,只清除太阳周围的颜色,这样太阳就不会重复 了。

canvas.save();

canvas.clipRect(circle_cx - CIRCLE_CY_HALO_RADIUS2, circle_cy

  • CIRCLE_CY_HALO_RADIUS2, circle_cx
  • CIRCLE_CY_HALO_RADIUS2, circle_cy

  • CIRCLE_CY_HALO_RADIUS2);

canvas.drawColor(Color.BLACK);

canvas.restore();

5、设置全屏

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

设计模式学习笔记

设计模式系列学习视频

[外链图片转存中…(img-ovE3ASrA-1711046701605)]

设计模式系列学习视频

[外链图片转存中…(img-5QvaPmOu-1711046701605)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值