本文主要介绍如何实现一个可以响应各个方向的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
分享到:
相关推荐
在许多应用中,我们可能希望实现一个功能,当用户点击TextView时,文本能展开显示全部内容,同时伴随着优雅的动画效果。这篇博客“Android TextView实现点击展开动画效果”提供了一个实用的方法来实现这个功能。 ...
在XML布局文件中,可以直接为TextView添加`android:rotation`属性来实现文字旋转,如下所示: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=...
在本次分享的“安卓textView相关-TextView实现歌词同步.rar”压缩包中,主要探讨了如何利用TextView来实现实时的歌词同步功能。这个功能在音乐播放应用中很常见,能够给用户带来更好的视听体验。下面我们将详细解析...
在某些场景下,我们可能需要实现部分文字的响应功能,即点击或触摸文本的某一部分后触发特定的操作。这个功能在交互设计中非常常见,比如链接的点击跳转、电话号码的拨号等。下面我们将详细探讨如何实现`EditText`和...
在Android开发中,当需要在一个TextView中展示大量文本,而屏幕空间有限时,可以使用TextView的垂直滚动功能来实现文本的连续显示。本篇文章将详细讲解如何在Android中实现TextView的垂直滚动效果。 首先,要开启...
Android TextView 文字片点击特效、点击事件监听实现了TextView 文字片段 点击_长按 事件监听 以及点击特效关键技术 在自定义Span中对TextPaint的color、bgcolor等属性设置选中时的文字颜色,背景色、 在自定义...
我们在浏览网页时,网页的文本可以放大缩小,android两点手势,两点距离靠近时缩小,两点距离...那么若果不用android的WebView控件,单纯的TextView能否做到放大缩小呢,其实也是可以的。只要响应和处理手势事件即可。
- 考虑添加页码显示,可以通过设置TextView或使用独立的PageIndicator控件来实现。 5. **性能优化**: - 使用View Holder模式提高ListView或RecyclerView的滚动性能。 - 对于非常大的文本,可以使用懒加载策略,...
如果需要自定义滚动速度或方向,可以通过创建一个ValueAnimator对象并设置其更新回调来实现。在回调中,我们可以不断改变TextView的text属性,模拟滚动效果。 **手动滚动的实现** 1. **使用Scroller类**: ...
为了提升用户体验,开发者经常需要为TextView添加点击效果,使用户能够清楚地感知到操作反馈。本篇文章将详细探讨如何实现TextView的点击效果,以及相关的设计原则和技巧。 首先,我们可以使用Android SDK中的内置...
此外,还可以考虑添加触摸事件监听,使得用户可以点击用户名查看该用户的详细资料,或者长按评论进行复制、分享等操作。这需要用到TextView的setOnClickListener和OnLongClickListener,以及注册BroadcastReceiver来...
Android 中的 TextView 控件可以通过使用 SpannableString 和 ClickableSpan 来实现部分文字可点击跳转的功能。下面是实现的详细介绍: 首先,我们需要创建一个继承自 ClickableSpan 的类,例如 RecordClickSpan。...
总之,`TextView`的滚动效果可以通过开启`marquee`、设置动画或者自定义滚动逻辑来实现。在实际开发中,可以根据需求选择合适的方法,以达到理想的效果。记得在测试过程中调整滚动速度、重复次数等参数,以保证用户...
通过上述代码,我们可以实现 Android 可点击展开的 TextView。这样,我们可以让用户更方便地查看被省略后的内容。 在实际开发中,我们可以根据需要选择不同的实现方式,例如使用走马灯效果或添加可点击的图标。但...
注意,实际的`setOffset`实现可能需要考虑文本的宽度、TextView的宽度以及滚动方向,以确保拖动操作的平滑和合理。 总结来说,这个压缩包文件提供了一种在Android中实现跑马灯效果和拖动文字的方法,开发者可以通过...
在许多应用程序中,我们可能需要实现TextView中的文本高亮,并且能够对这些高亮的部分进行点击操作,例如在微博应用中,用户可能会@其他人、分享网址(http)或者引用特定的话题。这种功能在社交应用中非常常见,...
这个功能使得用户可以点击`TextView`,然后展开查看全部内容,提高用户体验。本篇文章将深入探讨如何实现`TextView`的点击显示更多功能,并通过示例代码`ShowMoreDemo`进行详解。 ### 1. 概述 `TextView`的点击...
当需要在TextView中嵌入超链接并实现点击跳转时,开发者通常会利用Android的`TextView`特性和`Linkify`类来完成这一功能。下面我们将详细介绍如何通过TextView实现超链接的跳转,并结合提供的`HyperLinkDemo`示例...
这篇内容将深入讲解如何在Android中实现TextView的文字颜色变换及点击响应。 首先,我们要了解如何改变TextView的文字颜色。在XML布局文件中,我们可以直接通过`android:textColor`属性来设置文本颜色。例如,如果...
本示例中,我们探讨的是如何自定义一个TextView来实现垂直自动轮播功能,这个控件名为`ScrollTextView`,它继承了`TextSwitcher`。`TextSwitcher`是一个用于在两个视图之间切换文本的视图,通常用于动画效果,而在...