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打印布局。谢谢您的回答。