Android使用画布绘制(非贴图)计算多边形的面积

Android使用画布绘制(非贴图)计算多边形的面积,android,canvas,polygon,area,Android,Canvas,Polygon,Area,我使用这些代码在画布上绘制多边形。但是我想计算多边形的面积。当然,请给出每条线的测量值。我在地图上看到了很多例子,但并不在画布上转换/改编。有人能告诉我一个方法吗 提前谢谢 import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.

我使用这些代码在画布上绘制多边形。但是我想计算多边形的面积。当然,请给出每条线的测量值。我在地图上看到了很多例子,但并不在画布上转换/改编。有人能告诉我一个方法吗

提前谢谢

import java.util.ArrayList;
import java.util.List;    
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Point;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(new DrawingView(MainActivity.this));
    }

    class DrawingView extends SurfaceView 
    {
        private SurfaceHolder surfaceHolder;
        private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

        private List<Point> pointsList = new ArrayList<Point>();

        public DrawingView(Context context)
        {
            super(context);
            surfaceHolder = getHolder();
            paint.setColor(Color.BLACK);
            paint.setStyle(Style.FILL);
        }

        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            {
                if (surfaceHolder.getSurface().isValid()) 
                {
                    // Add current touch position to the list of points
                    pointsList.add(new Point((int) event.getX(), (int) event.getY()));

                    // Get canvas from surface
                    Canvas canvas = surfaceHolder.lockCanvas();

                    // Clear screen
                    canvas.drawColor(Color.WHITE);

                    // Iterate on the list
                    for (int i = 0; i < pointsList.size(); i++)
                    {
                        Point current = pointsList.get(i);
                        Point first = pointsList.get(0);

                        // Draw points
                        canvas.drawCircle(current.x, current.y, 5, paint);                  

                        // Draw line with next point (if it exists)
                        if (i + 1 < pointsList.size()) 
                        {
                            Point next = pointsList.get(i + 1);
                            canvas.drawLine(current.x, current.y, next.x, next.y, paint);
                            canvas.drawLine(next.x, next.y, first.x, first.y, paint);
                            c
                        }

                    }

                    // Release canvas
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
            }
            return false;
        }
    }
}
import java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Paint.Style;
导入android.graphics.Point;
导入android.os.Bundle;
导入android.view.MotionEvent;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
公共类MainActivity扩展了活动
{
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(新的DrawingView(MainActivity.this));
}
类DrawingView扩展了SurfaceView
{
私人地勤人员地勤人员;
私人最终油漆=新油漆(油漆。防油漆别名标志);
私有列表点列表=新的ArrayList();
公共绘图视图(上下文)
{
超级(上下文);
surfaceHolder=getHolder();
油漆。设置颜色(颜色。黑色);
油漆.设置样式(样式.填充);
}
@凌驾
公共布尔onTouchEvent(运动事件)
{
if(event.getAction()==MotionEvent.ACTION\u向下)
{
if(surfaceHolder.getSurface().isValid())
{
//将当前触摸位置添加到点列表
添加(新点((int)event.getX(),(int)event.getY());
//从表面获取画布
Canvas Canvas=surfaceHolder.lockCanvas();
//清屏
画布。drawColor(颜色。白色);
//在列表上迭代
对于(int i=0;i
这里有一种计算多边形面积的方法

for (int i = 0; i < points.size(); i++) {
    float addX = points.get(i).x;
    float addY = points.get(i == points.size() - 1 ? 0 : i + 1).y;
    float subX = points.get(i == points.size() - 1 ? 0 : i + 1).x;
    float subY = points.get(i).y;
    total += (addX * addY * 0.5);
    total -= (subX * subY * 0.5);
}
return Math.abs(total);
for(int i=0;i
例如(而不是画布)XY打印布局。谢谢您的回答。