android实现使用绘图作出一种裁剪任意多边形快速算法
来源:互联网 发布:python是面向对象吗 编辑:程序博客网 时间:2024/06/05 18:37
在一个重写的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;@Overrideprotected 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;}});}
0 0
- android实现使用绘图作出一种裁剪任意多边形快速算法
- android实现使用绘图作出一种裁剪任意多边形快速算法 (转自 cafelette)
- Android使用绘图创建任意多边形
- 任意多边形裁剪圆的实现思路
- 编程实现Sutherlang-Hodgman多边形裁剪算法
- 多边形裁剪算法
- 直线的多边形裁剪及任意多边形互裁剪
- Android 任意多边形以任意条边画平分线切割图形算法
- 一种使用Qt快速绘图的思路
- 链表实现Weiler-Atherton多边形裁剪算法
- 一种简单、快速、高效的多边形减面算法
- 一种简单、快速、高效的多边形减面算法
- Weiler-Atherton多边形裁剪算法
- Sutherland-Hodgman算法(多边形裁剪)
- Sutherland-Hodgman算法(多边形裁剪)
- Weiler-Atherton多边形裁剪算法
- Sutherlang-Hodgman 多边形裁剪算法
- Sutherland-Hodgman算法(多边形裁剪)
- 成为Linux内核高手的四个方法
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- nginx模块开发的有用链接
- Chrome 扩展开发之消息传递
- NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename 解惑
- android实现使用绘图作出一种裁剪任意多边形快速算法
- 东软睿道实训推荐:无经验的求职者应该如何准备面试(2)
- nonatomic、atomic区别
- 随写
- 路由器题目
- IOS访问限制密码忘记解决方案
- 在Eclipse中使用JUnit4进行单元测试(高级篇)
- java连接linux中mysql出现:Access denied for user 'root'@'192.168.91.1' (using password: YES)
- 【LeetCode】Path Sum