本文主要介绍如何实现一个可以响应各个方向的CompoundDrawables点击操作的TextView。关于其使用见可以响应各个方向CompoundDrawables点击操作的TextView的使用。
TextView可以通过setCompoundDrawablesWithIntrinsicBounds在TextView内容的上下左右添加图片方便用户的需要,但默认并没有提供设置点击这些图片后响应操作的接口。本文介绍自己自定义的一个TextView达到此效果,主要功能为设置TextView各个方向图片的响应。
首先让我们看下效果
点击最下面的图片响应如上,执行结果为显示“Bottom”的Toast,可以下载Demo代码CompoundDrawablesTextViewDemo编译运行。
一、源代码
见CompoundDrawablesTextView.java,其中注释明确。
项目地址见TrineaAndroidCommon GoogleCode或(TrineaAndroidCommon Git)
二、原理
原理相对简单,利用Android View的事件响应机制,用户click屏幕某个区域会先执行onTouchEvent函数再执行onClick函数。在onTouchEvent函数中判断户点击的坐标是否在TextView相应位置CompoundDrawables可响应的范围内,若在进行标记并且在onClick函数中执行相应的响应函数即可。
主要是通过重写TextView的onTouchEvent函数和OnScrollListener的onClick函数实现
2.1 onTouchEvent函数
public boolean onTouchEvent(MotionEvent event)当用户手指接触屏幕中时,判断ACTION_DOWN点的坐标是否在四个Drawable可响应区域范围内,并保存到四个变量中,如下
mIsLeftTouched = touchLeftDrawable(event)
表示是否在左边的Drawable的可响应区域范围内,并将结果保存到mIsLeftTouched内
关于如何判断点是否在可响应区域范围见2.3响应区域判断的介绍
2.2 onClick函数
public void onClick(View v)根据onTouchEvent中判断的结果决定是否做相应的Drawable点击响应函数,如
if (mIsLeftTouched) {
mDrawableClickListener.onClick(DrawableClickListener.DrawablePosition.LEFT);
}
表示若在左边的Drawable的可响应区域范围内,则执行Left的onClick函数。
2.3 响应区域判断
这块涉及到一些计算以及android系统中各个View的相对坐标系
上下左右计算方法分别在touchLeftDrawable(event), touchTopDrawable(event), touchRightDrawable(event), touchBottomDrawable(event);四个函数中。
大家结合上面的四个函数和我计算时的草稿看下吧,如果对其中的计算有疑问欢迎留言交流,下面以上边图片点击范围计算为例:
从下图可以看出上部图片的点击可响应区域即为以A、B为对角顶点的矩形,计算出A、B两点的坐标即可确定矩形。
上面是A点X和Y坐标的计算方法,下面是B点X和Y坐标的计算方法
- 大小: 475.5 KB
- 大小: 424.6 KB
分享到:
相关推荐
本文实例讲述了Android TextView实现垂直滚动效果的方法。分享给大家供大家参考,具体如下: 在TextView中,如果文本很长,可能需要实现垂直滚动显示文本的效果。这里需要在XML布局文件中为TextView设置如下几个属性...
旋转TextView文字显示方向,可参考学习一下。
我们在浏览网页时,网页的文本可以放大缩小,android两点手势,两点距离靠近时缩小,两点距离...那么若果不用android的WebView控件,单纯的TextView能否做到放大缩小呢,其实也是可以的。只要响应和处理手势事件即可。
TextView实现歌词同步.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在Android中用textview实现简单的小说分页,字体可调节,未对字符串进行任何操作,分段和控制格式自行对字符串操作
自定义TextView实现文字闪烁效果
Android实现TextView文字滚动
Android实现类似朋友圈评论的功能(TextView分段操作)
1、自动控制TextView内容长度的伸缩、显示与隐藏 2、响应对应控制图标的点击完成TextView的收缩、图标的切换 3、封装为工具,一键调用.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行...
Android自定义TextView实现动态的文字效果
textview实现了上下滚动的特效,对应博文: http://blog.csdn.net/zjc08125/article/details/8953140
textview实现word分散对齐功能
Android TextView 文字片点击特效、点击事件监听实现了TextView 文字片段 点击_长按 事件监听 以及点击特效关键技术 在自定义Span中对TextPaint的color、bgcolor等属性设置选中时的文字颜色,背景色、 在自定义...
android Textview 实现html 图片点击 两种方式 一种是用webview ,调用jsInterface实现 另一种是 textview 使用Html.from()方法
Android Textview实现文本间距
自定义的一个TextView控件继承TextSwitcher能实现自动垂直轮播,可设置字体大小颜色,轮播时间
主要为大家详细介绍了Android中TextView实现部分文字可点击跳转的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
实现TextView的点击效果,获得更好的用户 体验
安卓中的TextView 实现部分文字点击事件,通过Spannable 实现
项目需要研究下textview实现歌词向上滚动效果