转载自:http://blog.csdn.net/wy353208214/article/details/10286105
今天面试遇到的一个问题,Android TextView点击实现展开带动画效果(即文字一行一行向下展出来),不过这个是不带Animation的,晚上自己回家没事就实现了下。
下面说下思路吧,就是先获取TextView完全展开时的最大maxLines记录下来,让后再把TextView的maxLine设置为你想指定的任何值,我这里指定的是1,这样加载完成VIew之后我们看到的TextView就不是完全展开的,这样做的主要目的是拿到完全展开的maxLines,让后用户点击的时候不断的更新maxLine大小即可。
至于如何在onCreate里面捕获到最大的maxLines,我们可以这样做,用View类中的getViewTreeObserver方法,可以获取到指定View的观察者,在绘制控件前的一刹那进行回调,这样速度上又不耽误,得到的数据又是准确的,但此方法在之后可能会被反复调用,因此需要加入限制,普通需求下,只用View类中的getViewTreeObserver方法,可以获取到指定View的观察者,在绘制控件前的一刹那进行回调,这样速度上又不耽误,得到的数据由是准确的,但此方法在之后可能会被反复调用,因此需要加入限制,普通需求下,只计算一次就够了计算一次就够了。
具体实现请看代码吧,代码上面都有注释我就不一一解释了。
主界面MainActivity.java:
package cn.mytest.expandtextview; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnPreDrawListener; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener{ private static final int MAX = 1;//初始maxLine大小 private static final int TIME = 20;//间隔时间 private int maxLines; private TextView textView; private boolean hasMesure = false; private Thread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ //获取ViewTreeObserver View观察者,并注册一个监听事件,这个时间是在View还未绘制的时候执行的,也就是在onDraw之前 //textView默认是没有maxLine限制的,这样我就可以计算到完全显示的maxLine textView = (TextView) findViewById(R.id.textView); ViewTreeObserver viewTreeObserver = textView.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() { @Override public boolean onPreDraw() { //只需要获取一次就可以了 if(!hasMesure){ //这里获取到完全展示的maxLine maxLines = textView.getLineCount(); //设置maxLine的默认值,这样用户看到View就是限制了maxLine的TextView textView.setMaxLines(MAX); hasMesure = true; } return true; } }); textView.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub toggle(); } /** * 打开TextView方法 */ @SuppressLint("HandlerLeak") private void toggle(){ final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int lines = msg.what; //这里接受到消息,让后更新TextView设置他的maxLine就行了 textView.setMaxLines(lines); textView.postInvalidate(); } }; if(thread != null) handler.removeCallbacks(thread); thread = new Thread(){ @Override public void run() { int count = MAX; while(count++ <= maxLines){ //每隔20mms发送消息 Message message = new Message(); message.what = count; handler.sendMessage(message); try { Thread.sleep(TIME); } catch (InterruptedException e) { e.printStackTrace(); } } super.run(); } }; thread.start(); } }
简单布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:text="@string/test" android:textSize="18sp" /> </RelativeLayout>
string.xml文本:
<string name="test">1996年1月,身为加州斯坦福大学理学博士生的拉里·佩奇和谢尔盖·布卢姆在学校开始一项关于搜索的研究项目。[26] 区别于传统的搜索靠搜索字眼在页面中出现次数来进行结果排序的方法,两人开发了一个对网站之间的关系做精确分析的搜寻引擎。[27] 这个名为PageRank的引擎通过检查网页中的反向链接以评估站点的重要性,此引擎的精确度胜于当时的基本搜索技术。[28][29] 最初,佩奇和布卢姆将这个搜索引擎命名为‘BackRub’,直到后来改为‘Google’。[30][31][32] 这个新名字来源于一个数学大数googol(数字1后有100个0,即自然数10100)单词错误的拼写方式,[33][34] 象征着为人们提供搜索海量优质信息的决心。[35] Google搜索引擎在斯坦福大学的网站上启用,域名为google.stanford.edu。[36]</string>
源码见附件。
相关推荐
本教程将详细介绍如何实现一个没有使用Animation类的TextView展开动画效果。 首先,我们需要创建一个新的自定义TextView,比如叫做ExpandTextView。这个自定义视图需要继承自Android原生的TextView,并添加一些额外...
本文将深入探讨如何在Android中创建一个动态的菜单展开动画,以此来模仿卫星导航菜单(Satellite Menu)的效果,类似于一个中心点发射出多个选项的动画。这种效果常见于许多现代移动应用,它不仅美观,还能帮助用户...
`Android-ExpandTextView`是一个专门用于实现“展开/收起”功能的TextView组件,它允许用户在需要时查看或隐藏长文本,提高了用户体验。下面将详细讨论`ExpandTextView`的核心功能、实现原理以及如何在项目中应用。 ...
为了解决这个问题,我们可以实现TextView的展开和收起效果,让用户点击“更多”查看全部内容,点击“收起”则恢复显示前四行。以下将详细介绍如何实现这一功能。 首先,我们需要一个可扩展的TextView。这个自定义的...
在Android开发中,有时我们希望实现一些特殊的UI效果来提升用户体验,例如在程序启动时逐字显示一段话并伴随有动画效果。这种效果可以增加应用的趣味性和吸引力。本篇文章将探讨如何在Android中利用自定义的TextView...
Android实现带动画效果的可点击展开TextView是Android开发中的一种常见需求,通过使用动画效果,可以实现TextView的展开和收起,提高用户体验。本文将详细介绍Android实现带动画效果的可点击展开TextView的方法,...
总的来说,通过自定义`TextView`并添加点击监听和折叠展开逻辑,我们可以实现Android应用程序中段落文本的折叠展开功能,提高用户界面的交互性和可读性。`TextExpandOrFoldDemo-master`项目则提供了具体的实践案例,...
标题"android TextView 伸缩效果"所指的就是这种通过点击“更多”按钮来实现TextView文本展开和收缩的功能。 要实现这样的效果,首先需要对TextView的基本属性有所了解。TextView的`maxLines`属性可以限制显示的...
为了解决这个问题,开发者可以使用一种特殊类型的`TextView`,即“可折叠”或“展开/收起”的`TextView`,这种控件允许用户点击后显示或隐藏详细内容。本篇将深入探讨如何在Android中实现这样的功能。 首先,我们...
在这种情况下,我们可以实现`TextView`的折叠与展开功能,以优化用户体验,只显示部分内容并提供一个按钮或手势来展开全部文本。这个功能在Android应用的详情介绍、评论区等场景中尤为常见。 `TextView`的折叠与...
总之,实现“android textview全文和收起”的功能涉及到布局设计、事件监听、文本处理和动画效果等多个方面,是Android开发中常见的需求。通过以上步骤,我们可以创建出符合用户习惯且易于操作的界面交互。
最近做项目,效果图要用到TextView的折叠,超过一定行数的时候,就会折叠起来,点击可以展开。网上找了一些效果,自己也稍作了修改。便拿来与网友分享分享。 参考文献:Android UI实现多行文本折叠展开效果 第一种...
总之,“textview展开和收起”的实现主要依赖于`TextView`的`maxLines`和`ellipsize`属性,以及监听用户交互来改变这些属性。通过这种方式,我们可以提供一个简洁而直观的界面,让用户能够轻松地查看和隐藏详细信息...
在Android开发中,`TextView`是...通过以上讲解,你应该对如何在Android应用中实现`TextView`的点击显示更多功能有了清晰的理解。在实际开发中,可以根据具体需求进行调整和优化,例如添加动画效果、自定义提示文字等。
5. **动画效果**:为了提供更好的用户体验,可以添加展开和收起的动画。比如,使用`ObjectAnimator`来改变TextView的高度,或者调整其透明度。 6. **显示指示器**:在TextView旁边添加一个指示器,如“展开”或...
以上就是关于TextView展开和折叠的基本知识,通过合理运用这些技巧,我们可以为用户提供更好的阅读体验。在实际项目中,还可以根据需求进一步定制,如添加展开按钮样式、文字提示等,以满足各种界面设计的需求。
在这种场景下,“Android可伸缩的TextView”提供了一个解决方案,它允许用户点击以展开或收起TextView的内容,从而自定义控制显示的行数,并能以特定的提示文字表示是否还有更多内容。这种功能在诸如公告、评论或者...
"Android-用Label处理TextView并实现单击显示更多行"这一主题聚焦于如何利用特定的技术来优化长文本的显示效果,让用户能够通过交互来查看全部内容。 TextView是Android系统中最常用的控件之一,用于显示单行或多行...