android canvas离屏绘制 android用canvas画出线段和箭头
大家好,我是云百科的客服小柏,我来为大家解答以上问题。android,canvas离屏绘制,android用canvas画出线段和箭头很多人还不知道,现在让我们一起来看看吧!
解答:
1、 设置布局文件,添加2个控件,一个按钮,一个图片
2、 在维护能力添加两个控件的全局变量,以及画图工具的全局变量
3、 私有按钮btn_drawline
4、 私有ImageViewiv_画布
5、 专用位图基本位图
6、 私人帆布画布;
7、 私漆油漆;
8、 在oncreate()方法中初始化纽扣控件和图片控件,并给纽扣添加按键监听
9、 按键监听中调用画图方法:
10、 //初始化一个画笔,笔触宽度为5,颜色为红色
11、 Paint=newPaint();
12、 画画。setstrokewidth(1);
13、 paint.setColor(颜色。红色);
14、 iv_canvas=(ImageView)findViewById(r.id。iv_canvas);
15、 BTN画线。setonclicklistener(点击);
16、 BTN画线。setonclicklistener(新视图OnClickListener(){
17、 @覆盖
18、 公共voidonClick(视图五){
19、 drawTria((浮点)300,(浮点)100,(浮点)100,(浮点)400,
20、 50,10);
21、 }
22、 });
23、 画线段和箭头的方法,处理箭头指向任何方向都能显示出来
24、 受保护的无效drawTria(floatfromX,floatfromY,floattoX,floattoY,
25、 intheigth,intbottom){
26、 //高度和底部分别为三角形的高与底的一半,调节三角形大小
27、 基础位图=位图。创建位图(iv_canvas。getwidth(),
28、 iv_canvas.getHeight(),位图。配置ARGB_8888);
29、 画布=新画布(基础位图);
30、 画布.drawColor(颜色。黄色);//设置底色
31、 canvas.drawLine(fromX、fromY、toX、toY、paint);
32、 浮点juli=(浮点)数学。sqrt((toX-fromX)*(toX-fromX)
33、 (toY-fromY)*(toY-fromY));//获取线段距离
34、 floatjuliX=toX-fromX;//有正负,不要取绝对值
35、 floatJuly=toY-fromY;//有正负,不要取绝对值
36、 floatdianX=toX-(身高/juli*juliX);
37、 floatdianY=toY-(heigth/juli*July);
38、 floatdian2X=fromX(heigth/juli*juliX);
39、 floatdian2Y=fromY(heigth/juli*July);
40、 //终点的箭头
41、 PathPath=newPath();
42、 path.moveTo(toX,toY);//此点为三边形的起点
43、 路径。行到(dianX(下/七月*七月),dianY
44、 -(底/juli*juliX));
45、 路径。行到(dianX-(bottom/juli*July),dianY
46、 (底/juli*juliX));
47、 路径。close();//使这些点构成封闭的三边形
48、 canvas.drawPath(path,paint);
49、 //显示图像
50、 iv_画布。setimage位图(基础位图);
51、 }
52、 画出的箭头便随着线段的斜率而画出来了。
53、 线段的四个方向,以及线段平行X轴,平行Y轴的情况都能正常显示。
54、 如果要画双向箭头,只需要再添加一个箭头即可,调用以下方法:
55、 受保护的无效drawTria(floatfromX,floatfromY,floattoX,floattoY,
56、 intheigth,intbottom){
57、 //高度和底部分别为三角形的高与底的一半,调节三角形大小
58、 基础位图=位图。创建位图(iv_canvas。getwidth(),
59、 iv_canvas.getHeight(),位图。配置ARGB_8888);
60、 画布=新画布(基础位图);
61、 画布.drawColor(颜色。黄色);//设置底色
62、 canvas.drawLine(fromX、fromY、toX、toY、paint);
63、 浮点juli=(浮点)数学。sqrt((toX-fromX)*(toX-fromX)
64、 (toY-fromY)*(toY-fromY));//获取线段距离
65、 floatjuliX=toX-fromX;//有正负,不要取绝对值
66、 floatJuly=toY-fromY;//有正负,不要取绝对值
67、 floatdianX=toX-(身高/juli*juliX);
68、 floatdianY=toY-(heigth/juli*July);
69、 floatdian2X=fromX(heigth/juli*juliX);
70、 floatdian2Y=fromY(heigth/juli*July);
71、 //终点的箭头
72、 PathPath=newPath();
73、 path.moveTo(toX,toY);//此点为三边形的起点
74、 路径。行到(dianX(下/七月*七月),dianY
75、 -(底/juli*juliX));
76、 路径。行到(dianX-(bottom/juli*July),dianY
77、 (底/juli*juliX));
78、 路径。close();//使这些点构成封闭的三边形
79、 canvas.drawPath(path,paint);
80、 //起点的箭头
81、 PathPath2=newPath();
82、 path2.moveTo(fromX,fromY);//此点为边形的起点
83、 路径2。行到(dian2X(下/七月*七月),dian2Y
84、 -(底/juli*juliX));
85、 路径2。行到(dian2X-(下/七月*七月),dian2Y
86、 (底/juli*juliX));
87、 路径2。close();//使这些点构成封闭的三边形
88、 canvas.drawPath(path2,paint);
89、 //显示图像
90、 iv_画布。setimage位图(基础位图);
91、 }
本文到此讲解完毕了,希望对大家有帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
最近收到一位患者的留言,说自己这几天总感觉肛门有下坠胀感,特别难受,上网一查,好多信息都指向癌症,这可...浏览全文>>
-
腹痛、腹泻总反复!可能是小肠、大肠在抗议。基于症状特征区分小肠疾病与大肠疾病的具体差异分析:一、核心症状...浏览全文>>
-
近日,中国中医药信息学会肛肠分会·肿瘤分会·治未病分会·河北名医学会肛肠分会·盆底与便秘分会·河北省中...浏览全文>>
-
安徽蚌埠的长安启源E07作为一款备受关注的新能源车型,其价格和配置一直是消费者热议的话题。如果你正考虑入手...浏览全文>>
-
近年来,随着新能源汽车市场的快速发展,插电式混合动力车型逐渐成为消费者关注的焦点。生活家PHEV作为一款备...浏览全文>>
-
在2025款生活家PHEV车型正式上市之前,提前了解相关费用明细对于购车者来说至关重要。这款插电式混合动力车型...浏览全文>>
-
大众途昂作为一款中大型SUV,凭借其宽敞的空间和强劲的动力配置,在市场上一直拥有不错的口碑。对于计划购买20...浏览全文>>
-
阜阳地区的长安启源Q05 2025款车型凭借其时尚的外观设计和丰富的配置,吸引了众多消费者的关注。这款车型作为...浏览全文>>
-
阜阳揽巡作为一款备受关注的中型SUV,凭借其豪华的配置和超值的价格吸引了众多消费者的目光。这款车不仅在外观...浏览全文>>
-
淮南长安启源A07自上市以来便凭借其卓越的性能和亲民的价格赢得了众多消费者的青睐。作为2025款的新车型,它在...浏览全文>>