Android实现连线题效果
效果图
全部正确:
有对有错:
结果展示,纯黑色:
支持图片:
实现思路
仔细分析可以发现,连线题的布局可以分为两部分,一个是左右两列矩形,另一个是他们之间的连线。
每个矩形的宽高都一样,或者等比例,这样利于给他们定位,添加矩形时使用ViewGroup#ddView(View child, LayoutParams params)
方法,我们通过LayoutParams
参数来控制每个矩形的位置。
为了方便添加矩形,这里我们的自定义布局继承自RelativeLayout。
public class LinkLineView extends RelativeLayout {...
}
接下来说连线,连线我们通过记录他们的起点和终点数据,然后调用View#invalidate
方法,在ViewGgroup#dispatchDraw()
方法里面通过canvas.drawLine()
方法进行绘制。
我们假设线都是从左向右连的,起点
就是左边矩形右边距的中点,终点
就是右边矩形左边距的中点。在添加矩形的时候我们可以知道每个矩形的具体参数,所以所有连线的起点和终点的数据我们是知道的,接着就是如何表示一根线的问题。
在所有连线完成之前,连线是可以取消掉的;在所有连线完成后,我们需要用连线结果跟正确结果进行比对的,所以我们需要针对每次连线定义一个数据结构,具体如下:
public class LinkLineBean {/*** 直线的横纵坐标*/private float startX;private float startY;private float endX;private float endY;public LinkLineBean(float startX, float startY, float endX, float endY) {this.startX = startX;this.startY = startY;this.endX = endX;this.endY = endY;}// 省略getter和setter方法@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (!(o instanceof LinkLineBean)) {return false;}LinkLineBean that = (LinkLineBean) o;return (Float.compare(that.startX, startX) == 0 &&Float.compare(that.startY, startY) == 0 &&Float.compare(that.endX, endX) == 0 &&Float.compare(that.endY, endY) == 0)|| (Float.compare(that.startX, endX) == 0 &&Float.compare(that.startY, endY) == 0 &&Float.compare(that.endX, startX) == 0 &&Float.compare(that.endY, startY) == 0);}@Overridepublic int hashCode() {return Objects.hash(startX, startY, endX, endY);}
}
这里省略了一些不必要的代码。
重写equals和hashCode方法是为了比较是否是同一条连线。如果连线A的起点等于连线B的终点,连线A的终点等于连线B的起点,我们就认为他们是同一条连线,这个也符合我们的常识,同一条线从左向右连和从右向左连是一样的。
核心思路说完了,剩下的就是一些细节处理了。
具体代码请看:LinkLineDemo
如果觉得好用请记得star。
Android实现连线题效果相关推荐
- Android 倒车影像车道线,3D效果
Android 倒车影像车道线 1.直接上代码 public class LaneLineView extends View {private Paint paint;private Camera c ...
- Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)
转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该 ...
- Android实现支付宝AR功能,Android RecyclerView 实现支付宝首页效果
Android RecyclerView 实现支付宝首页效果 [TOC] 虽然我本人不喜欢支付宝的,但是这个网格本身其实还是不错的,项目更新中更改了一个布局为网格模式,类似支付宝.(估计是产品抄袭的= ...
- android自动画线,Android画布画线 - 使线条变粗
这看起来应该有点微不足道,但是在我的Android应用程序中,我使用画布绘制了连接在一起的一系列线条.出于某种原因,我的线条非常非常微弱.我想知道如何让我的线条变粗?这是我的代码..Android画布 ...
- 用flash做连线题(线的一端跟随鼠标)
帮同事做课件,其中要做个连线测试题,需要实现用户可以用鼠标从一个点拉出一根线来的效果,实际上是线 的一端跟随鼠标,改变线的长度和倾斜角度.这和一般的图象或文字跟随鼠标有点区别.因为把高中的三角函数忘光 ...
- Android绘制波浪线
今天让我们来绘制一条波浪线,并且提供了控制波浪大小和波浪速度的方法,首先我们来看看完成的效果: 效果是不是还不错,接下来我们就来看看具体怎么实现的吧! 如果你学会了这种绘制波浪线的方式,可以了解下波浪 ...
- Android利用SVG实现动画效果
系列文章目录 Android利用SVG实现动画效果 老规矩,文中/文末会放置源码 文章目录 系列文章目录 前言 一.先看看Android中一个简单的SVG图 二.pathdata中参数的定义(三角形是 ...
- Android绘制波浪线 进阶
前言 在我的上一篇博客中,我讲解了如何绘制一条波浪线,今天我们的目的是,绘制一条随心所欲的波浪线,什么叫随心所欲的波浪线呢,由于上篇主要讲解的是绘制波浪线的原理,不过就有人提问了,万一我想要的波浪线长 ...
- android自动画线,Android自定义View——扇形统计图
Android 扇形统计图 先看看效果: 看上去如果觉得还行就继续往下看吧! 效果图1 效果图2 自定义View 定义成员变量 private int mHeight, mWidth;//宽高 pri ...
- android特效按钮点击效果
2019独角兽企业重金招聘Python工程师标准>>> android特效按钮点击效果,动画从里到外渐变放大散花效果,本例子适合做一些特效的app使用, 使用很简单,直接可以把里面代 ...
最新文章
- ATL的GUI程序设计(前言)
- 你敢在post和get上刁难我,就别怪我装逼了
- SQL 分页存储过程(转)
- 曝光原理_泰国精戈咖啡效果反馈 作用原理曝光
- python程序代码_python基础二
- 三流面试问技术,二流面试问平台,一流面试……
- Qt+VS2015+番茄助手 个人常用快捷键集锦
- iOS申请真机调试证书-图文详解
- 超标量处理器设计 姚永斌 第6章 指令解码 摘录
- python生成拼音
- vue使用高德地图第一次进去点标记有数据,第二次进去就没有了
- VS编程,WPF控件增加图片背景的一种方法
- 迄今见过的最好的职业规划文章
- icon图标制作网站推荐
- 用计算机编程做微信,电脑端微信双开,教你两种简单的方法,上手即用!
- 元素周期表的118个化学元素
- Mysql和Navicat
- 【问题思考总结】式子两边同时除以dx万一dx=0呢?
- Uniapp苹果登录
- 如何对pdf电子文档进行手写签名