首页 > 软件开发 > ANDROID >

android用canvas画出线段和箭头

来源:互联网 2023-03-17 00:08:04 396

在界面中画出一条线段以及线段的箭头。x4W办公区 - 实用经验教程分享!

做完后发现网上的箭头种类各样,也有用圆形画出箭头的方法,这里画出一条箭头的底与线段垂直,箭头大小可修改的方案。x4W办公区 - 实用经验教程分享!

android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

工具/原料

  • 安卓开发工具Ecilpse

方法/步骤

  • 1

    设置布局文件,添加2个控件,一个Button,一个ImageViewx4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 2

    在MainAcitvity添加两个控件的全局变量,以及画图工具的全局变量x4W办公区 - 实用经验教程分享!

    private Button btn_drawline;x4W办公区 - 实用经验教程分享!

    private ImageView iv_canvas;x4W办公区 - 实用经验教程分享!

    private Bitmap baseBitmap;x4W办公区 - 实用经验教程分享!

    private Canvas canvas;x4W办公区 - 实用经验教程分享!

    private Paint paint;x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 2该信息未经授权抓取自百度经验
  • 3

    在oncreate()方法中初始化 Button控件和ImageView控件,并给Button添加按键监听x4W办公区 - 实用经验教程分享!

    按键监听中调用画图方法:x4W办公区 - 实用经验教程分享!

    x4W办公区 - 实用经验教程分享!

    // 初始化一个画笔,笔触宽度为5,颜色为红色x4W办公区 - 实用经验教程分享!

    paint = new Paint();x4W办公区 - 实用经验教程分享!

    paint.setStrokeWidth(1);x4W办公区 - 实用经验教程分享!

    paint.setColor(Color.RED);x4W办公区 - 实用经验教程分享!

    x4W办公区 - 实用经验教程分享!

    iv_canvas = (ImageView) findViewById(R.id.iv_canvas);x4W办公区 - 实用经验教程分享!

    btn_drawline.setOnClickListener(click);x4W办公区 - 实用经验教程分享!

    btn_drawline.setOnClickListener(new View.OnClickListener() {x4W办公区 - 实用经验教程分享!

    @Overridex4W办公区 - 实用经验教程分享!

    public void onClick(View v) {x4W办公区 - 实用经验教程分享!

    drawTria((float) 300, (float) 100, (float) 100, (float) 400,x4W办公区 - 实用经验教程分享!

    50, 10);x4W办公区 - 实用经验教程分享!

    }x4W办公区 - 实用经验教程分享!

    });x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 4

    画线段和箭头的方法,处理箭头指向任何方向都能显示出来x4W办公区 - 实用经验教程分享!

    x4W办公区 - 实用经验教程分享!

    protected void drawTria(float fromX, float fromY, float toX, float toY,x4W办公区 - 实用经验教程分享!

    int heigth, int bottom) {x4W办公区 - 实用经验教程分享!

    // heigth和bottom分别为三角形的高与底的一半,调节三角形大小x4W办公区 - 实用经验教程分享!

    baseBitmap = Bitmap.createBitmap(iv_canvas.getWidth(),x4W办公区 - 实用经验教程分享!

    iv_canvas.getHeight(), Bitmap.Config.ARGB_8888);x4W办公区 - 实用经验教程分享!

    canvas = new Canvas(baseBitmap);x4W办公区 - 实用经验教程分享!

    canvas.drawColor(Color.YELLOW);// 设置底色x4W办公区 - 实用经验教程分享!

    canvas.drawLine(fromX, fromY, toX, toY, paint);x4W办公区 - 实用经验教程分享!

    float juli = (float) Math.sqrt((toX - fromX) * (toX - fromX)x4W办公区 - 实用经验教程分享!

    (toY - fromY) * (toY - fromY));// 获取线段距离x4W办公区 - 实用经验教程分享!

    float juliX = toX - fromX;// 有正负,不要取绝对值x4W办公区 - 实用经验教程分享!

    float juliY = toY - fromY;// 有正负,不要取绝对值x4W办公区 - 实用经验教程分享!

    float dianX = toX - (heigth / juli * juliX);x4W办公区 - 实用经验教程分享!

    float dianY = toY - (heigth / juli * juliY);x4W办公区 - 实用经验教程分享!

    float dian2X = fromX (heigth / juli * juliX);x4W办公区 - 实用经验教程分享!

    float dian2Y = fromY (heigth / juli * juliY);x4W办公区 - 实用经验教程分享!

    //终点的箭头x4W办公区 - 实用经验教程分享!

    Path path = new Path();x4W办公区 - 实用经验教程分享!

    path.moveTo(toX, toY);// 此点为三边形的起点x4W办公区 - 实用经验教程分享!

    path.lineTo(dianX (bottom / juli * juliY), dianYx4W办公区 - 实用经验教程分享!

    - (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path.lineTo(dianX - (bottom / juli * juliY), dianYx4W办公区 - 实用经验教程分享!

    (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path.close(); // 使这些点构成封闭的三边形x4W办公区 - 实用经验教程分享!

    canvas.drawPath(path, paint);x4W办公区 - 实用经验教程分享!

    //显示图像x4W办公区 - 实用经验教程分享!

    iv_canvas.setImageBitmap(baseBitmap);x4W办公区 - 实用经验教程分享!

    }x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 5

    画出的箭头便随着线段的斜率而画出来了。x4W办公区 - 实用经验教程分享!

    线段的四个方向,以及线段平行X轴,平行Y轴的情况都能正常显示。x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 6

    如果要画双向箭头,只需要再添加一个箭头即可,调用以下方法:x4W办公区 - 实用经验教程分享!

    x4W办公区 - 实用经验教程分享!

    protected void drawTria(float fromX, float fromY, float toX, float toY,x4W办公区 - 实用经验教程分享!

    int heigth, int bottom) {x4W办公区 - 实用经验教程分享!

    // heigth和bottom分别为三角形的高与底的一半,调节三角形大小x4W办公区 - 实用经验教程分享!

    baseBitmap = Bitmap.createBitmap(iv_canvas.getWidth(),x4W办公区 - 实用经验教程分享!

    iv_canvas.getHeight(), Bitmap.Config.ARGB_8888);x4W办公区 - 实用经验教程分享!

    canvas = new Canvas(baseBitmap);x4W办公区 - 实用经验教程分享!

    canvas.drawColor(Color.YELLOW);// 设置底色x4W办公区 - 实用经验教程分享!

    canvas.drawLine(fromX, fromY, toX, toY, paint);x4W办公区 - 实用经验教程分享!

    float juli = (float) Math.sqrt((toX - fromX) * (toX - fromX)x4W办公区 - 实用经验教程分享!

    (toY - fromY) * (toY - fromY));// 获取线段距离x4W办公区 - 实用经验教程分享!

    float juliX = toX - fromX;// 有正负,不要取绝对值x4W办公区 - 实用经验教程分享!

    float juliY = toY - fromY;// 有正负,不要取绝对值x4W办公区 - 实用经验教程分享!

    float dianX = toX - (heigth / juli * juliX);x4W办公区 - 实用经验教程分享!

    float dianY = toY - (heigth / juli * juliY);x4W办公区 - 实用经验教程分享!

    float dian2X = fromX (heigth / juli * juliX);x4W办公区 - 实用经验教程分享!

    float dian2Y = fromY (heigth / juli * juliY);x4W办公区 - 实用经验教程分享!

    //终点的箭头x4W办公区 - 实用经验教程分享!

    Path path = new Path();x4W办公区 - 实用经验教程分享!

    path.moveTo(toX, toY);// 此点为三边形的起点x4W办公区 - 实用经验教程分享!

    path.lineTo(dianX (bottom / juli * juliY), dianYx4W办公区 - 实用经验教程分享!

    - (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path.lineTo(dianX - (bottom / juli * juliY), dianYx4W办公区 - 实用经验教程分享!

    (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path.close(); // 使这些点构成封闭的三边形x4W办公区 - 实用经验教程分享!

    canvas.drawPath(path, paint);x4W办公区 - 实用经验教程分享!

    //起点的箭头x4W办公区 - 实用经验教程分享!

    Path path2 = new Path();x4W办公区 - 实用经验教程分享!

    path2.moveTo(fromX, fromY);// 此点为边形的起点x4W办公区 - 实用经验教程分享!

    path2.lineTo(dian2X (bottom / juli * juliY), dian2Yx4W办公区 - 实用经验教程分享!

    - (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path2.lineTo(dian2X - (bottom / juli * juliY), dian2Yx4W办公区 - 实用经验教程分享!

    (bottom / juli * juliX));x4W办公区 - 实用经验教程分享!

    path2.close(); // 使这些点构成封闭的三边形x4W办公区 - 实用经验教程分享!

    canvas.drawPath(path2, paint);x4W办公区 - 实用经验教程分享!

    //显示图像x4W办公区 - 实用经验教程分享!

    iv_canvas.setImageBitmap(baseBitmap);x4W办公区 - 实用经验教程分享!

    }x4W办公区 - 实用经验教程分享!

    android用canvas画出线段和箭头x4W办公区 - 实用经验教程分享!

  • 注意事项

    • 以上几处部分之间添加即可,其他无需改动,亲测可用

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!x4W办公区 - 实用经验教程分享!


    标签: Android

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码