Android使用绘图创建任意多边形

2024-08-27 08:48

本文主要是介绍Android使用绘图创建任意多边形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在一个重写的View,主要绘制在View的OnDraw()方法中,

首先:先绘制出几个点,当然是任意多

最后一个点和第一个点闭合在一起之后,画点结束

然后可以随意拖动达到裁减的效果

当然裁剪的功能没有实现


代码如下

View--------:
--**************************************************************
public class MyView extends View{
public int doWhat = 0;
ArrayList<HashMap<String,Float>> list = new ArrayList<HashMap<String,Float>>();
public MyView(Context context) {
super(context);
setBackgroundResource(R.drawable.youxibiajii);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.GREEN);
for (int i = 0; i < list.size(); i++) {
canvas.drawCircle(list.get(i).get("x"), list.get(i).get("y")
, 10, paint);
if(i>0){
canvas.drawLine(list.get(i-1).get("x"), list.get(i-1).get("y"),
list.get(i).get("x"), list.get(i).get("y"), paint);
}
}
}
*******************************************************************************************
Activity-------******************************************************************
public class MainActivity extends Activity {
public static float  ScreenW,ScreenH;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics dis = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dis);
ScreenW = dis.widthPixels;
ScreenH = dis.heightPixels;
final MyView view = new MyView(this);
setContentView(view);
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent event) {
float startX = event.getRawX();
float startY = event.getRawY();
if(view.doWhat == 0){//画点
switch(event.getAction()){
case KeyEvent.ACTION_DOWN:
HashMap<String,Float> map = new HashMap<String, Float>();
if(view.list.size()>2&&
(startX>view.list.get(0).get("x")-20&&startY>view.list.get(0).get("y")-20)
&&(startX<view.list.get(0).get("x")+20&&startY<view.list.get(0).get("y")+20)){
map.put("x", view.list.get(0).get("x"));
map.put("y", view.list.get(0).get("y"));
view.list.add(map);
view.doWhat = 1;
break;
}
map.put("x", startX);
map.put("y", startY);
view.list.add(map);
break;
}
}
else{//拖动
for (int i = 0; i < view.list.size(); i++) {
if((startX>view.list.get(i).get("x")-15&&startY>view.list.get(i).get("y")-15)
&&(startX<view.list.get(i).get("x")+15&&startY<view.list.get(i).get("y")+15)){
if(i==0){
view.list.get(i).put("x", startX);
view.list.get(i).put("y", startY);
view.list.get(view.list.size()-1).put("x", startX);
view.list.get(view.list.size()-1).put("y", startY);
}
else{
view.list.get(i).put("x", startX);
view.list.get(i).put("y", startY);
}
break;
}
}
}
view.invalidate();
return true;
}
});
}
*********************************************
over
Thanks***



这篇关于Android使用绘图创建任意多边形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111191

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab