我们就把九宫格分解成 外圆 、内圆、连线三部分 外圆半径Radius,内圆半径dp(5) 建立一个集合来放置 外圆的圆心( 内圆的圆心也一样) private ArrayList<Point...主结构已经画完了,接下来就是如何绘制点与点之间的连线了,有人会觉得没思路,其实很简单了,以3X3 为例子哈 我们可以给这九个棋子编号1–9号,把他存入LinkedHashSet中,着重介绍这个LinkedHashSet...还有一个问题,就是点击边界问题,这个好解决,我们把每一个棋子都花矩形,通过圆来控制边界,(其实也可以通过矩形来控制边界,这个也很简单,原理是差不多的,有兴趣的同学可以下去试试) 同样也是用集合。...我把代码都贴上来,注释的很详细。当然加入了一个手指触控点,更加好看一些。...;//外圆半径 private float mMinRadius;//内圆半径 private float mStrokeWidth = 10; //绘制时的画笔宽度 private Point mMovePoint
的DST_OUT来产生中间的透明裁剪区域,一定要另起一个Layer(层) canvas.saveLayer(0, 0, this.getWidth(), this.getHeight(), null,...九宫格的绘制稍微繁琐一点,分三个步骤 绘制长方形边框 绘制九宫格引导线 绘制裁剪边框的是个直角 绘制长方形边框的这里就不说了,比较简单。...,加入两个手指之间的距离超过 10,此时我们认为进入 ZOOM 模式。...DRAG 模式的话当我们手指按下的时候进入。NONE 模式,当我们手机抬起的时候,进入复位模式。...Android 技术点其实是蛮多的,可以说是麻雀虽小,五脏俱全。
,触发扇形按钮之后,将手指移动到按钮上并松开,即可触发相应的操作。 ...所谓的"长按动作"就是触发扇形按钮之后,将手指移动到扇形按钮上按住不松开,超过设定的时间后,扇形按钮便会变成你设置的长按动作,继续按住手指不松开,将手指移动到相应的扇形按钮,将会触发设定好的长按动作。...除了扇形按钮这个功能之外,小苏今天还要介绍"扇形指针"的功能,当扇形按钮被手指触发之后,且0扇形指针功能处于开启状态时,将手指向扇形的直边方向滑动,即可触发扇形指针功能。...触发扇形指针功能后,屏幕上会出现一条圆弧和一条线段,圆弧和线相交之处有一个小圈,按住屏幕不放并移动手指,屏幕上的圆弧线段和小圈会随你的手指而移动,单手操作时,将小圈对准你想要点击而又够不着的位置,松开手指...,LMT将会代替你的手指而点击这个位置。
终端模拟器是一款非常精致的手机模拟器,可以拒绝卡顿掉线的情况,加快解压游戏的加载进度,提升性能,加快手机速度。 ...相当于平台上的一个Linux Shell工具,相当于中的CMD命令提示符。...有了它,我们可以在上操作Linux系统的命令,专业版自带SSH和远程登录客户端,让你有更多更好的体验android 终端模拟器 源码,普通用户也可以使用,比如ping,方便。 ...界面清爽完美的中文版软件; 随你选android 终端模拟器 源码,随你分,随你超神! 游戏主播必备; 00-1010可以选择屏幕大小,随意调节。 ...支持即时存档和金手指功能; 最有用最有价值的移动福利投递之家。 自动匹配游戏列表,一键打开脚本助手。
因为你在上面滑动手指的时候,这些索引会更随你手指滑动,明显操作体验就不对了。 比较难以知道你现在触碰的到是哪个字母。 使用CupertinoPicker来放置这些索引,这种也不可以?...然而,仔细一想体验似乎也不大对,他选中的似乎不是你手指按住的位置,放弃 使用Slider 怎么说,slider实际上浮动在一个控件的上面,比如column,然后slider的高度和这个column相同。...万能的Stack Overflow上有这么一个解决方式, 虽然说可以实现滑动的时候知道滑动到哪里,更具计算知道索引到哪个字母 手指点上去,也能瞬间移动到哪个位置,但是体验并不流畅,用起来挺复杂的,放弃。...还是使用GestureDetactor,但是不仅仅是利用他的回调,这里利用的是有点类似于android额onTouchInterCeptor的方式。...有了这货,就可以算出手指在这个父控件中的相对位置了 也就说可以定位出目前手指在哪个字母索引上。 ok,最后实现的效果就是这样的了,目前已经将这个组件上传到了pub中了,地址是这里。
序言:前两天因为项目的原因,去做了一下仿ios的数字解锁功能,然后写了那篇快给你的app上锁吧(android数字解锁),后来想到应用中常见的还有另外一种解锁就是绘制图案解锁,这两种解锁的布局看起来是很相似的...抬起正确状态 思路 这里又是一个九宫格布局,布局可以参考上一篇快给你的app上锁吧(android数字解锁),只不过这里的九宫格上我们画的是图片(bitmap)。...2、然后每两个点连成一条线 首先需要判断第一个点的状态是否是正常的(这个是点的属性,可以自定义),正常的话两点之间就连正确的线,错误的话两点之间就连错误的线 布局画好之后我们还需要判断手势,即onTouch...判断第一次按下是否选中九宫格中的点(2). 如果第一次选中九宫格中的点,将手指在移动且手指按下的点不是九宫格中的点这个标识位置为true 3、抬起: (1)....//表示一次完整的图案绘制是否结束 private boolean isMoveButNotPoint; //表示手指在移动,但是并不是九宫格中的点 private float
我实现的思路: 1.继承ImageView类 2.重写onTouchEvent方法,在ACTION_MOVE(即移动时),记录下所经过的点坐标,在ACTION_UP时(即手指离开时,这时一条线已经画完)...,将所画的线(点的集合)保存在一个集合中 3.重写onDraw方法,利用canvas和所记录下的线和点画出线来 可能我讲的十分笼统,下面来看看实际的代码吧 //代表ImageView上的一点 public...,获取保存所经过的点并调用invalidate方法进行屏幕刷新(可以使onDraw方法被调用,稍后可以看到),当我们手指离开时添加之前的所画的线到集合中,并调用invalidate方法 接下来看看所重写的...line来实现撤销功能。...以上这篇android中实现在ImageView上随意画线涂鸦的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。
截屏 一、自定义View的常用方法 相信每个Android程序员都知道,我们每天的开发工作当中都在不停地跟View打交道,Android中的任何一个布局、任何一个控件其实都是直接或间接继承自View...总之,跟画布无关的操作都不要写在这里。...View 本文并没有使用View提供的scrollTo和scrollBy来控制滚动,而是重新定义一个x,y属性来记录滚动位置,通过这个属性绘制相应的位置,来实现滚动效果。...这样操作可以通过指定绘制区域(屏幕外的内容不绘制,感兴趣的同学可以去尝试实现)来解决性能问题。 drawScale通过遍历items来绘制每一个元素,包括刻度和对应的文字,都是比较基本的操作。...最后通过postInvalidateOnAnimation或invalidate来通知重新绘制,onDraw根据新的x,y绘制对应位置的画面,来实现滑动。
然后给我们自定义的矩形mRect的上下左右的边界赋值。一般情况下我们使用这个自定义的View显示大图,都是占满这个View,所以这里矩形初始大小就让它跟View一样大。...到这里运行就能绘制出一部分图片了,想要看全部的图片,需要手指拖动来看,这就需要处理各种事件了。...,来移动矩形绘制区域,这里需要处理各个边界点,比如左边最小就为0,右边最大为图片的宽度,不能超出边界否则就报错了。...缩放完成之后,需要根据当前的缩放比重新设置绘制区域的边界。最后也需要重新定位一下边界,因为如果使用两个手指放大之后,这时候双击返回原状,如果不处理边界,位置会出错。处理边界的代码可以抽取出来。...节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
是手指第一次触摸屏幕 事件为MotionEvent.ACTION_MOVE是手指在屏幕上移动 事件为MotionEvent.ACTION_UP是手指离开屏幕 当手指触摸到屏幕 定义手指最后的坐标lastX...调用MotionEvent对象的getX() 方法,得到lastX的值 当手指在屏幕上移动 定义手指横向移动的距离dis 调用getX()-lastX就是移动的距离 定义滑动按钮的左边就是这个移动的距离...变量,如果有拖动发生,就把这个变量赋值true 在onCllick()方法里面对这个变量进行判断 当手指抬起的时候 判断当前slideBtnLeft来确定当前按钮是开还是关的状态 slideBtnLeft...比较 maxLeft的一半就能判断当前状态 package com.tsh.myswitchbtn; import android.content.Context; import android.graphics.Bitmap...; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint
在本文,我们将手把手构建一个简单的绘图画布,在画布上用户可以在画布上使用手指自由绘画并选择不同颜色的画笔。...这可能用于根据上下文或者触摸交互类型以不同方式处理触摸事件(例如,绘制一个点而不是一条线)。 Constructor:明确需要提供的 points 和 paint。...如果当前点和下一个点标记为可绘制(isPoint 为真),此方法遍历列表并从每个点到下一个点绘制一条线。...如果点不是连续的,即 isPoint 为 false,则跳过绘制到下一个点。这是处理用户手指抬离屏幕然后触屏生成另一个点绘制不连续点的简单方法。...总结 现在,我们使用 Flutter 成功地创建了一个基础的绘图应用!这个应用允许我们在屏幕上选择颜色来绘制,并且清空绘制。
页面布局,相对布局 按钮位于父窗体的下方使用android:layout_alignParentBottom=”true” 图片位于按钮的上方,填充父窗体,使用android:layout_above=...getAction()方法,获取触摸事件 switch判断这个事件 事件为MotionEvent.ACTION_DOWN是手指第一次触摸屏幕 事件为MotionEvent.ACTION_MOVE是手指在屏幕上移动...事件为MotionEvent.ACTION_UP是手指离开屏幕 当手指触摸屏幕时 定义手指开始位置的坐标startX startY 调用MotionEvent对象的getX() 和 getY()方法,...可以得到坐标 当手指移动的时候,我们要获取新的坐标newX和newY,方法和上面一样 调用Canvas对象的drawLine()方法,画一条线,参数:startX,startY,newX,newY,paint...; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View
我的视频系列 http://edu.csdn.net/course/detail/2741,一起来学习Android… 代码参考地址 https://github.com/liuzhiyuan0932.../** * 计算手指是否是落在了滑块上(默认是按照滑块在未解锁的初始位置来计算的) */ public boolean isDownOnBlock(float x1, float x2.../** * 通过handler来控制滑块在未解锁的时候,平缓的滑动到左端 */ Handler handler = new Handler() { public void...// 当手指抬起的时候,应该是让滑块归位的 // 说明未解锁 if (x < blockBackgoundWidth - blockWidth...filter.addAction("android.intent.action.SCREEN_OFF"); // 在代码里边来注册广播 this.registerReceiver
,然后对这块区域进行多层的绘图(背景层,前景层),然后去监听触摸事件,把手指触摸的区域的前景层给消除即可。...首先我们先来实现一个简单版的: 步骤: 1、绘制图片作为背景层 2、绘制一张和背景层大小一致的灰色图层作为前景层 3、监听手指的触摸区域,把对应区域的前景层消除 1、首先绘制图片作为背景层,这个太简单了...: 步骤: 1、绘制中奖信息作为背景层 2、绘制一张和中奖信息同等大小的刮奖封面作为前景层 3、监听手指的触摸区域,把对应区域的前景层消除 4、在消除大部分区域的时候,讲中奖信息完整展示 步骤...关于文字位置的确定 首先我们需要知道任何的控件在Android的布局中外层都是一个矩形的,A代表刮刮卡绘制区域,B代表中奖信息绘制区域,所以在这里我们绘制文本信息的起始点应该是A布局宽的一半减去B布局宽的一半...Path来记录用户手指触摸路径就是一样的了,这里我们额外来添加一个功能,使得当用户在刮刮卡上刮的区域范围超过50%后,自动消除刮刮卡前景层。
本文实例为大家分享了Android实现小球跟随手指移动效果的具体代码,供大家参考,具体内容如下 一. 需求功能 手指在屏幕上滑动,红色的小球始终跟随手指移动。...实现的思路: 1)自定义View,在onDraw中画圆作为小球; 2)重写自定义View的onTouchEvent方法,记录触屏坐标,用新的坐标重新绘制小球; 3)在布局中引用自定义View布局,运行程序...; /** * 自定义圆形小球view:手指在屏幕上滑动,红色的小球始终跟随手指移动。...比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。...其余的线程可以理解为工作者线程。invalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通 知UI线程进行界面更新。
今天看了大神写的关于贝塞尔曲线的博客,就写下了关于手指轨迹的一篇博客, 一、什么是贝塞尔曲线 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。...一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。...三、手指轨迹原理 因为这个我们用的是自定义控件,所以我们创建一个finger的类集成View,重写onDraw onTouchEvent这个两个方法 public finger(Context context...其实手指轨迹的原理也很简单,就是通过onTouchEvent来获取道手指的位置,来绘制path路径即可。...ACTION_DOWN时,这里我通过moveTo的方法绘制了第一个点,这个必须使用moveTo,因为如果不使用这个这个点将会在(0,0)开始,最后我们回去到xy点作为控制点,最后使用返回 真的方式让ACTION_MOVE
(View 的绘制流程是从 ViewRoot 的 performTraversals() 方法开始的,它经过 measure、layout、draw 三个流程最终才能将一个 View 完整的绘制出来。)...直接继承 View 来实现自定义 View 的这种方式比较灵活,可以实现很多复杂的效果,这种方式最关键的步骤就是重写 onDraw() 方法,通过 Paint 画笔等工具在 Canvas 画布上进行各种图案的绘制以达到我们想要的效果...其实在自定义 View 过程中,难点往往不是怎么使用画笔本身,而是绘制出预期效果的思路,例如:你想通过自定义 View 来做一个折线图控件,传入一组数据怎么确定这些数据在画布上对应点的相对坐标,而确定点的坐标就需要通过相关的数学公式来计算了...ScaleGestureDetector 缩放手指检测 除了上面最普通的 MotionEvent 事件之外,Android 还提供了很多有趣的事件,就想 GestureDetector(手势检测)、VelocityTracker...实现,效果跟平时在手机查看照片时我们用两根手指来放大/缩小图片一样。
在onDraw方法中绘制出滑块,在控件的布局文件中设置控件的背景图片 设置滑块的触摸事件,分别算出当手指按下屏幕.移动,离开屏幕时滑块的位置 在移动的过程中,对滑块的位置进行限定,使滑块的位置不能超过指定的区域...在手指离开屏幕的事件中判定手指的位置,如果滑块没有到达最右边,那就让滑块回到开始的位置 通过重写computeScroll方法,让滑块在手指离开屏幕的时候如果没有到达最右边,那就让他回到开始的位置 设置一个回调接口...(); break; case MotionEvent.ACTION_MOVE: //当手指移动的时候,记录移动的距离 destance = (int)(event.getX()-startx); //...,记录手指离开的位置 if (destance<bgBitmap.getWidth()-slidBitmap.getWidth()){ //手指抬起时,如果滑块不在右边,那就让他回到左边 startx...int currx = scroller.getCurrX(); scrollTo(-currx,0); //重新绘制 invalidate(); } } //设置一个解锁的接口 interface
正上方的提示区域,用一个类(LockIndicator.java)来实现,自定义view来绘制9个提示图标; 2....手势密码绘制区域,用一个类(GestureContentView.java)来实现,它继承自ViewGroup里面, 添加9个ImageView来表示图标, 在onLayout()方法中设置它们的位置;...、ACTION_UP事件,来绘制手势连接不同点之间的路径; 4. 9个点的对象,用一个类(GesturePoint.java)来实现,保存它的位置、状态、背景图片等相关信息; 5....手势密码的获取,判断手指当前的位置,根据滑动路径经过的点,按顺序保存绘制的点的顺序(这里的点顺序从上到下分别是:1,2,3,4,5,6,7,8,9),不能有重复的点。...复写onLayout这个方法,让点按需求排列 3.定义一个可以画线的View,复写onTouchEvent方法,在这个方法里面进行画直线的操作 4.判断用户手指当前的位置,取出当前的位置去与那9个点中的每个点的位置进行比较
由于公司新的项目需要用到九宫格手势密码解锁的功能,于是觉得自己写一个。废话不多说,直接上效果图: ? 首选我们来分析下实现的思路: 1....手指离开屏幕的时候判断手势密码是否正确,如若错误这把错误状态下的点和线绘制出来。 具体实现: 首先我们得绘制出默认正常状态下的九个点: ?...计算出x y的偏移量后,来初始化九个点的位置。...并标记现在是绘制的状态下。同样在移动手指的时候也是把检测到的点存储起来,修改状态为按下。当手指离开屏幕的时候,把标记改为不在绘制。...所有被选中的点绘制完后,如果当前还处在绘制状态(手机没有离开屏幕),那我们就new一个手指触摸位置作为连接线的终点。
领取专属 10元无门槛券
手把手带您无忧上云