Android仿英语流利说取词放大控件的实现方法(附demo源码下载)

作者:bigconvience 时间:2022-07-10 23:14:18 

本文实例讲述了Android仿英语流利说取词放大控件的实现方法。分享给大家供大家参考,具体如下:

1 取词放大控件

英语流利说是一款非常帮的口语学习app,在app的修炼页面长按屏幕,会弹出一个放大镜,当手指移到某个单词的附近,可以看到该英文单词会被选中,效果如下图所示:

Android仿英语流利说取词放大控件的实现方法(附demo源码下载)

2 代码示例

该控件挺有意思,于是我写了个简单的demo,完整实例代码点击此处本站下载。,程序运行后的效果如下:

Android仿英语流利说取词放大控件的实现方法(附demo源码下载)

3 实现原理

该控件的实现原理比较简单,下面介绍几个比较重要的类

① WordView

在实习该控件的过程中,我发现看似普通的TextView,其功能异常的强大,TextView的源码值得研究。WordView的主要功能是根据touch的位置,选择其附近的单词,然后更改选中单词的颜色,关键代码如下:


public void trySelectWord(MotionEvent event) {
 Layout layout = getLayout();
 if (layout == null) {
   return;
 }
 int line = layout.getLineForVertical(getScrollY() + (int) event.getY());
 final int index = layout.getOffsetForHorizontal(line, (int) event.getX());
 Word selectedWord = getWord(index);
 if (selectedWord != null) {
   mSpannableString.setSpan(mForegroundColorSpan,
       selectedWord.getStart(), selectedWord.getEnd(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
   setText(mSpannableString);
   mSelectedWord = getText().subSequence(selectedWord.getStart(), selectedWord.getEnd()).toString();
   mOnWordSelectListener.onWordSelect();
 }
}

② ExercisePanel

该控件主要用来显示放大镜,原理比较简单,就不介绍了。

希望本文所述对大家Android程序设计有所帮助。

标签:Android,控件
0
投稿

猜你喜欢

  • 深入了解Java设计模式之策略模式

    2021-06-24 22:45:56
  • 关于C#结构体 你需要知道的

    2022-01-04 13:11:49
  • Spring Boot 员工管理系统超详细教程(源码分享)

    2022-04-18 13:32:26
  • Python安装Jupyter Notebook配置使用教程详解

    2023-08-31 02:52:03
  • 深入浅析SpringBoot自动配置原理

    2022-11-19 01:49:24
  • 迅速掌握Java容器中常用的ArrayList类与Vector类用法

    2022-12-16 16:18:47
  • C#图形区域剪切的实现方法

    2021-09-12 10:15:50
  • 使用Mybatis如何实现删除多个数据

    2023-06-15 21:11:57
  • Java 定时任务技术趋势详情

    2021-10-29 14:48:13
  • java基础--自己动手实现一个LRU

    2023-06-25 18:21:04
  • java中的HashMap多层嵌套

    2023-11-27 07:34:52
  • C#实现简单的汽车租赁系统

    2022-08-17 00:51:52
  • Mybatis中注入执行sql查询、更新、新增及建表语句案例代码

    2023-03-07 18:53:55
  • SpringBoot+Vue.js实现前后端分离的文件上传功能

    2023-08-10 08:11:18
  • C#中LINQ多条件JOIN时为什么可以使用匿名类

    2023-01-24 15:38:21
  • android实现下拉菜单三级联动

    2022-10-13 15:46:53
  • Flow转LiveData数据丢失原理详解

    2023-05-20 10:22:25
  • ThreadLocal数据存储结构原理解析

    2023-04-27 19:54:55
  • Android保持屏幕常亮唤醒状态的方法

    2021-05-30 15:15:29
  • C#使用Process类调用外部程序分解

    2022-01-07 16:34:11
  • asp之家 软件编程 m.aspxhome.com