画多边形,拖动顶点
来源:互联网 发布:java个人博客建站 编辑:程序博客网 时间:2024/05/17 06:33
自定义控件MyView:
package com.example.draw;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View{
ArrayList<HashMap<String, Float>> al;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
al=new ArrayList<HashMap<String,Float>>();
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
paint.setColor(Color.GREEN);
for(int i=0;i<al.size();i++){//画点
canvas.drawCircle(al.get(i).get("x"), al.get(i).get("y"), 10, paint);
if(i>0){//连接两点
canvas.drawLine(al.get(i-1).get("x"), al.get(i-1).get("y"), al.get(i).get("x"), al.get(i).get("y"), paint);
}
}
}
}
MainActivity.java:
package com.example.draw;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class MainActivity extends Activity implements OnTouchListener {
private MyView myView;
private boolean flag=true;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView = new MyView(this);
setContentView(myView);
myView.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent event) {
float startX = event.getX();// 相对于屏幕左上角的x坐标;getX()相对于自身左上脚
float startY = event.getY();
if (flag) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
HashMap<String, Float> map = new HashMap<String, Float>();
if (myView.al.size() > 2
&& (startX > myView.al.get(0).get("x") - 20
&& startY > myView.al.get(0).get("y") - 20)
&& (startX < myView.al.get(0).get("x") + 20
&& startY < myView.al.get(0).get("y") + 20)) {
map.put("x", myView.al.get(0).get("x"));
map.put("y", myView.al.get(0).get("y"));
myView.al.add(map);
flag=false;
}
map.put("x", startX);
map.put("y", startY);
myView.al.add(map);
break;
}
} else {
for (int i = 0; i < myView.al.size(); i++) {
if((startX>myView.al.get(i).get("x")-20&&startY>myView.al.get(i).get("y")-20)
&&(startX<myView.al.get(i).get("x")+20&&startY<myView.al.get(i).get("y")+20)){
if(i==0){//最后一个点和最开始的一个点是同一个点
myView.al.get(i).put("x", startX);
myView.al.get(i).put("y", startY);
myView.al.get(myView.al.size()-1).put("x", startX);
myView.al.get(myView.al.size()-1).put("y", startY);
}else{
myView.al.get(i).put("x", startX);
myView.al.get(i).put("y", startY);
}
break;//此处如果没有break,两点可以合为一点
}
}
}
myView.invalidate();
return true;
}
}
- 画多边形,拖动顶点
- 根据经纬度画多边形(返回各个顶点坐标)
- 圆内接多边形的所有顶点
- [译]如何统一多边形顶点排列顺序
- 已知多边形顶点坐标求面积
- [WebGL入门]六,顶点和多边形
- 根据各顶点坐标求多边形面积
- 已知多边形各顶点坐标如何计算多边形面积
- 已知多边形各顶点的坐标,求多边形面积
- 2.12.1_拖动多边形对象
- 任意多边形顶点排序和凸包计算
- 多边形的边数(当然也是顶点数)
- 求含n个顶点的多边形面积
- 正方形组合而成的多边形的顶点排序算法
- 按三角形逆序输入顶点来计算多边形面积
- 计算几何 判断多边形顶点是否是顺时针
- C++:已知各顶点坐标求多边形面积
- 求多边形面积公式(已知顶点坐标)
- Copy List with Random Pointer
- oracle 动态sql参数带date类型无法执行的问题
- ASP.NET初了解(三)-- 内置对象(1)
- 解密
- 量表评价法
- 画多边形,拖动顶点
- pandas小记:pandas数据结构
- linux screen
- Mybatis批量插入语句(oracle)
- Image BufferImage 和 ImageIcon的区别
- Linux命令学习
- 希腊人5
- QT 2D绘图代码实例
- Unity中鼠标点击地面控制人物移动