Android 通过触摸动态地在屏幕上画矩形
需求概述:
在屏幕上用手指画出一个区域,返回所圈的区域坐标。
技术实现:
自定义View,设置画笔及对应参数,在onTouchEvent()回调函数里,对触摸事件进行判断。画出矩形图形。
代码:
自定义View:
1 public class GameView extends View { 2 // 声明Paint对象 3 private Paint mPaint = null; 4 private int StrokeWidth = 5; 5 private Rect rect = new Rect(0,0,0,0);//手动绘制矩形 6 7 public GameView(Context context){ 8 super(context); 9 //构建对象 10 mPaint = new Paint(); 11 mPaint.setColor(Color.RED); 12 //开启线程 13 // new Thread(this).start(); 14 } 15 @Override 16 protected void onDraw(Canvas canvas) { 17 super.onDraw(canvas); 18 //设置无锯齿 19 mPaint.setAntiAlias(true); 20 canvas.drawARGB(50,255,227,0); 21 mPaint.setStyle(Paint.Style.STROKE); 22 mPaint.setStrokeWidth(StrokeWidth); 23 mPaint.setColor(Color.GREEN); 24 mPaint.setAlpha(100); 25 // 绘制绿色实心矩形 26 canvas.drawRect(100, 200, 400, 200 + 400, mPaint); 27 mPaint.setColor(Color.RED); 28 canvas.drawRect(rect,mPaint); 29 } 30 @Override 31 public boolean onTouchEvent(MotionEvent event) { 32 int x = (int)event.getX(); 33 int y = (int)event.getY(); 34 switch (event.getAction()){ 35 case MotionEvent.ACTION_DOWN: 36 rect.right+=StrokeWidth; 37 rect.bottom+=StrokeWidth; 38 invalidate(rect); 39 rect.left = x; 40 rect.top = y; 41 rect.right =rect.left; 42 rect.bottom = rect.top; 43 44 case MotionEvent.ACTION_MOVE: 45 Rect old = 46 new Rect(rect.left,rect.top,rect.right+StrokeWidth,rect.bottom+StrokeWidth); 47 rect.right = x; 48 rect.bottom = y; 49 old.union(x,y); 50 invalidate(old); 51 break; 52 53 case MotionEvent.ACTION_UP: 54 break; 55 default: 56 break; 57 } 58 return true;//处理了触摸信息,消息不再传递 59 } 60 61 }
调用时,只需要在onCreate()函数里,直接添加就可以:
1 super.onCreate(savedInstanceState); 2 setContentView(R.layout.activity_main); 3 4 gameView = new GameView(this); 5 addContentView(gameView);
根据需要可以在自定义类中,加入返回圈定范围的函数。
ps:需要注意的是,在手指移动的时候,屏幕需要更新矩形时,原理上删除原来矩形,画上新矩形。但是由于空心矩形边厚度的存在,
会出现遗留的情况,此时要减去border厚度,可以解决上述问题。
Rect old = new Rect(rect.left,rect.top,rect.right+StrokeWidth,rect.bottom+StrokeWidth);
效果图:
转载于:https://www.cnblogs.com/xueyudlut/p/7162358.html
Android 通过触摸动态地在屏幕上画矩形相关推荐
- android 前后同时预览_用上这些官方动态壁纸,让你的 Android 主屏简洁又优雅
近年来,越来越多的 Android 厂商都选择通过定制动态壁纸的方式,来为自家手机打造独特的使用体验.一些 OEM 厂商甚至能跳出常规框架.赋予其与众不同的视觉效果和交互方式,只是一张动态壁纸,就足以 ...
- Android开发——用户在屏幕上的手势识别
0. 前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52462493 Android开发中,我们常常需要获取用户的手势操作事 ...
- Android运行时动态全屏以及旋转屏幕时不重新装载
Android运行时动态全屏以及旋转屏幕时不重新装载 最近要做一视频播放器,在横屏时需要用到全屏播放,在网络上搜索"android 全屏",查到的文章全是如何设置全屏,通过them ...
- android设备登录是什么手机_手机玩游戏屏幕太小,教你怎么一分钟把手机游戏画面投到大屏幕上...
把手机投屏到电脑上会带来很多便捷之处,尽管市面上部分手机屏幕的尺寸够大,但还是有很多手机屏幕不能满足我们的日常需求,例如玩一些大型游戏,屏幕小玩得不尽兴,相信很多人都会思考,有没有一些方法,可以将我们 ...
- ABAP 屏幕上动态修改按钮的图标
对于屏幕上画出来的按钮,有时候需要根据用户动作修改图标.这个功能可以通过设置多个按钮,然后根据需要显示只想要看到的按钮,也可以只画一个按钮,通过修改图标码动态修改 第一种比较直接,但是比较麻烦,这里介 ...
- Android Animation实现元素在屏幕上按照指定轨迹运动,以及出现NullPointerException的解决方案
因项目需要,在Android中实现了一个动画,当在Activity中点击特定按钮时,会在屏幕上添加一个ImageView,并按照指定的起点.终点,沿着特定的轨迹运动(例如直线). 实现方法 实现思路是 ...
- 如何在Android主屏幕上添加热点快捷方式
Portable Wi-Fi hotspots on your Android phone are great, because hotel Wi-Fi usually isn't, but togg ...
- android广播内容显示在屏幕上,在Android本机来电屏幕上弹出窗口,例如真正的来电者Android应用...
我也在努力(在这里理解你可能是错误的).您想要实现的是在Android 4.2(Jelly Bean)中显示该活动.我只是延迟显示活动.我在其他类中使用过PhoneStateListener.我可以在 ...
- android开发屏幕投射到电视6,用电视吃鸡!将手机上的内容投射到电视机的屏幕上!...
原标题:用电视吃鸡!将手机上的内容投射到电视机的屏幕上! 很多人可能不知道,无论是安卓手机还是iPhone,都可以通过投屏的方式将手机的画面投射到电视上,以此来和亲友分享自己手机里的照片/视频内容.今 ...
最新文章
- 5、修改视图(ALTER VIEW)
- Nginx服务的信号控制
- 在cmd命令行下编译运行C/C++源文件
- 前端学习(1705):前端系列javascript之原型中的this
- linux用命令行进行无线连接,linux以命令行下配置连接wlan无线网卡
- Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】
- LINQ to SQL之Step by Step及新手问题小结
- JAVA 一个或多个空格分割字符串
- 今晚直播丨管中窥豹 - PostgreSQL、openGauss、达梦和OceanBase的初步介绍
- mysql+installer+community+5.7.9_win10系统,mysql-installer-community-5.7.19.0.msi安装
- [转]Yii Framework: 从 model 中生成 select option
- 动画特效九:下拉刷新
- python和按键精灵哪个做脚本好_[按键精灵教程]学了这个你也能做出稳定的脚本...
- 酒店管理系统程序设计
- JPG/PNG转真SVG,非base64
- 经纬度坐标和投影坐标的转换
- vivos9e防抖功能设置教程
- LaTex关于数学公式的使用(11)--- 箭头,集合
- STM32 keyboard USB键盘功能的实现
- Excel如何根据数据生成条形码图片?
热门文章
- Python获取照片信息
- 暗淡蓝点-爱护我们的家园-地球
- 在使用SVN,下载文件到本地时,一定要把全目录下载下来!
- Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程
- Vue报错:Uncaught TypeError: Cannot assign to read only property ‘exports‘ of object 的解决方法
- 如何优雅处理前端异常?
- 3元购买微信小程序解决方案一个月
- 解决MybatisPlus修改时空字段不修改问题
- VS2012 无法启动IIS Express Web服务器的解决方案
- 解决 HomeBrew 下载缓慢的问题