前天复习了简单的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移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
设计模式学习笔记
设计模式系列学习视频
- 以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。
[外链图片转存中…(img-ovE3ASrA-1711046701605)]
设计模式系列学习视频
[外链图片转存中…(img-5QvaPmOu-1711046701605)]
- 以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。