android canvas画箭头android用canvas画出线段和箭头

android用canvas画出线段和箭头,在界面中画出一条线段以及线段的箭头。做完后发现网上的箭头种类各样,也有用圆形画出箭头的方法,这里画出一条箭头的底与线段垂直,箭头大小可修改的方案。
在界面中画出一条线段以及线段的箭头。做完后发现网上的箭头种类各样,也有用圆形画出箭头的方法,这里画出一条箭头的底与线段垂直,箭头大小可修改的方案。步骤阅读工具/原料安卓开发工具Ecilpse方法/步骤1设置布局文件,添加2个控件,一个Button,一个ImageView步骤阅读步骤阅读2在MainAcitvity添加两个控件的全局变量,以及画图工具的全局变量 privateButtonbtn_drawline; privateImageViewiv_canvas; privateBitmapbaseBitmap; privateCanvascanvas; privatePaintpaint;步骤阅读3在oncreate()方法中初始化Button控件和ImageView控件,并给Button添加按键监听按键监听中调用画图方法://初始化一个画笔,笔触宽度为5,颜色为红色 paint=newPaint(); paint.setStrokeWidth(1); paint.setColor(Color.RED);iv_canvas=(ImageView)findViewById(R.id.iv_canvas); btn_drawline.setOnClickListener(click); btn_drawline.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ drawTria((float)300,(float)100,(float)100,(float)400, 50,10); } });步骤阅读4画线段和箭头的方法,处理箭头指向任何方向都能显示出来protectedvoiddrawTria(floatfromX,floatfromY,floattoX,floattoY, intheigth,intbottom){ //heigth和bottom分别为三角形的高与底的一半,调节三角形大小 baseBitmap=Bitmap.createBitmap(iv_canvas.getWidth(), iv_canvas.getHeight(),Bitmap.Config.ARGB_8888); canvas=newCanvas(baseBitmap); canvas.drawColor(Color.YELLOW);//设置底色 canvas.drawLine(fromX,fromY,toX,toY,paint); floatjuli=(float)Math.sqrt((toX-fromX)*(toX-fromX) +(toY-fromY)*(toY-fromY));//获取线段距离 floatjuliX=toX-fromX;//有正负,不要取绝对值 floatjuliY=toY-fromY;//有正负,不要取绝对值 floatdianX=toX-(heigth/juli*juliX); floatdianY=toY-(heigth/juli*juliY); floatdian2X=fromX+(heigth/juli*juliX); floatdian2Y=fromY+(heigth/juli*juliY); //终点的箭头 Pathpath=newPath(); path.moveTo(toX,toY);//此点为三边形的起点 path.lineTo(dianX+(bottom/juli*juliY),dianY -(bottom/juli*juliX)); path.lineTo(dianX-(bottom/juli*juliY),dianY +(bottom/juli*juliX)); path.close();//使这些点构成封闭的三边形 canvas.drawPath(path,paint); //显示图像 iv_canvas.setImageBitmap(baseBitmap); }步骤阅读5画出的箭头便随着线段的斜率而画出来了。线段的四个方向,以及线段平行X轴,平行Y轴的情况都能正常显示。步骤阅读步骤阅读步骤阅读步骤阅读步骤阅读6如果要画双向箭头,只需要再添加一个箭头即可,调用以下方法:protectedvoiddrawTria(floatfromX,floatfromY,floattoX,floattoY, intheigth,intbottom){ //heigth和bottom分别为三角形的高与底的一半,调节三角形大小 baseBitmap=Bitmap.createBitmap(iv_canvas.getWidth(), iv_canvas.getHeight(),Bitmap.Config.ARGB_8888); canvas=newCanvas(baseBitmap); canvas.drawColor(Color.YELLOW);//设置底色 canvas.drawLine(fromX,fromY,toX,toY,paint); floatjuli=(float)Math.sqrt((toX-fromX)*(toX-fromX) +(toY-fromY)*(toY-fromY));//获取线段距离 floatjuliX=toX-fromX;//有正负,不要取绝对值 floatjuliY=toY-fromY;//有正负,不要取绝对值 floatdianX=toX-(heigth/juli*juliX); floatdianY=toY-(heigth/juli*juliY); floatdian2X=fromX+(heigth/juli*juliX); floatdian2Y=fromY+(heigth/juli*juliY); //终点的箭头 Pathpath=newPath(); path.moveTo(toX,toY);//此点为三边形的起点 path.lineTo(dianX+(bottom/juli*juliY),dianY -(bottom/juli*juliX)); path.lineTo(dianX-(bottom/juli*juliY),dianY +(bottom/juli*juliX)); path.close();//使这些点构成封闭的三边形 canvas.drawPath(path,paint); //起点的箭头 Pathpath2=newPath(); path2.moveTo(fromX,fromY);//此点为边形的起点 path2.lineTo(dian2X+(bottom/juli*juliY),dian2Y -(bottom/juli*juliX)); path2.lineTo(dian2X-(bottom/juli*juliY),dian2Y +(bottom/juli*juliX)); path2.close();//使这些点构成封闭的三边形 canvas.drawPath(path2,paint); //显示图像 iv_canvas.setImageBitmap(baseBitmap); }步骤阅读END注意事项以上几处部分之间添加即可,其他无需改动,亲测可用

本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/aN6Nagldzm.html

(0)

相关推荐