我如何从MainActivity内部绘制一个customview

时间:2019-02-15 22:24:08

标签: android android-custom-view

我有一个基于this教程(示例3)的松散的Customview Android应用程序(示例3),但是绘制的是线条而不是路径。该应用程序的目的是在customview上跟踪一系列连接的线,这些线的坐标以及一些时序信息由UDP数据报发送到由NodeMCU开发板控制的机器人。使用customview的TouchEvent方法绘制线条。路径完成后,将点击一个按钮,该按钮将在MainActivity中运行一个函数以计算路径详细信息并将其发送给机器人。所有这些都可以正常运行,但是我现在要做的是用一组表示机器人进度的线覆盖原始跟踪的路径。就我的应用程序而言,我大概需要使用Customview onDraw方法从MainActivity的按钮侦听器中生成这些行,但我找不到任何方法。

我的MainActivity按钮侦听器代码为

    clear = (Button)findViewById(R.id.button2);
    clear.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            coords = TouchEventView.getFloats(TouchEventView.points);
            if (coords.length < 4) {
                Toast.makeText(MainActivity.this,"You must have at least one line",Toast.LENGTH_LONG).show();
            }
            else if ( coords.length < 6) {
                SendData(length(coords[0],coords[1],coords[2],coords[3]));
                SendData("s");
            }
            else {
                for (int i = 0; i<coords.length-4; i=i+4) {
                    SendData(length(coords[i],coords[i+1],coords[i+2],coords[i+3]));
                    SendData(turn(coords[i],coords[i+1],coords[i+2],coords[i+3],coords[i+6],coords[i+7]));
                }
                int i = coords.length-4;
                SendData(length(coords[i],coords[i+1],coords[i+2],coords[i+3]));
                SendData("s");
            }
        }
    });

我的customview代码是

    @Override
public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX();
    float eventY = event.getY();

    gestureDetector.onTouchEvent(event);
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (! canvas_cleared) {
                    if (x < 0) {
                        x = eventX;
                        y = eventY;
                        startx = x;
                        starty = y;
                    }
                    else {
                        x = x1;
                        y = y1;
                    }
                    points.add(x);
                    points.add(y);
                    x1 = eventX;
                    y1 = eventY;
                }
                return true;
            case MotionEvent.ACTION_MOVE:
                x1 = eventX;
                y1 = eventY;
                break;
            case MotionEvent.ACTION_UP:
                if (canvas_cleared) {
                    x = -1;
                    y = -1;
                    canvas_cleared = false;
                }
                else {
                    points.add(eventX);
                    points.add(eventY);
                }
                break;
            default:
                return false;
    }
    invalidate();
    return true;
}

如何在MainActivity内部的customview上绘制线条?

0 个答案:

没有答案