专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动开发

仿英语流畅说取词放大控件的实现

发布时间:2010-05-29 23:38:13 文章来源:www.iduyao.cn 采编人员:星星草
仿英语流利说取词放大控件的实现

1 取词放大控件

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

2 代码示例

该控件挺有意思,于是我写了个简单的demo,点击下载,程序运行后的效果如下:
这里写图片描述

3 实现原理

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

1 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();
    }
}

2 ExercisePanel

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

1楼x3599815146小时前
不错
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: