效果图:
收起(默认)效果:

点击展开后的效果:

源码:
布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/activity_main"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ScrollView
        android:id="@+id/sv"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayout
            android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f6f6f6"android:orientation="vertical"android:padding="5dp"><TextView
                android:layout_width="match_parent"android:layout_height="wrap_content"android:maxLines="1"android:text="简介"android:textColor="#000000"android:textSize="20sp"/><TextView
                android:id="@+id/tv_des"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#666666"android:textSize="18sp"/><RelativeLayout
                android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:gravity="center_vertical"android:orientation="horizontal"><ImageView
                    android:id="@+id/iv_des_arrow"android:layout_width="20dp"android:layout_height="20dp"android:layout_alignParentEnd="true"android:background="@mipmap/arrow_down"/></RelativeLayout></LinearLayout></ScrollView>
</LinearLayout>

功能实现:

package com.cnfol.demo;import android.animation.Animator;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;public class MainActivity extends Activity implements View.OnClickListener {private TextView tv_des;private ImageView iv_des_arrow;private boolean isExpandDes = false;//是否展开整个描述private int minHeight = 0;private int maxHeight = 0;private ScrollView scrollView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);scrollView = (ScrollView) findViewById(R.id.sv);tv_des = (TextView) findViewById(R.id.tv_des);tv_des.setOnClickListener(this);iv_des_arrow = (ImageView) findViewById(R.id.iv_des_arrow);iv_des_arrow.setOnClickListener(this);String s = "中华人民共和国,简称中国,位于亚洲东部,太平洋西岸, 是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家。\n" +"\n" +"1949年(己丑年)10月1日成立, 以五星红旗为国旗, 《义勇军进行曲》为国歌, 国徽内容包括国旗、天安门、齿轮和麦稻穗, 首都北京, 省级行政区划为23个省、5个自治区、4个直辖市、2个特别行政区, 是一个以汉族为主体民族,由56个民族构成的统一多民族国家,汉族占总人口的91.51%。\n" +"\n" +"新中国成立后随即开展经济恢复与建设,1953年开始三大改造, 到1956年确立了社会主义制度,进入社会主义探索阶段。 文化大革命之后开始改革开放,逐步确立了中国特色社会主义制度。中国陆地面积约960万平方公里,大陆海岸线1.8万多千米,岛屿岸线1.4万多千米,内海和边海的水域面积约470多万平方千米。海域分布有大小岛屿7600多个,其中台湾岛最大,面积35798平方千米。同14国接壤,与8国海上相邻。中国是四大文明古国之一, 有着悠久的历史文化。是世界国土面积第三大的国家,世界第一大人口国家,与英、法、美、俄并为联合国安理会五大常任理事国。\n" +"\n" +"中国是世界第二大经济体,世界第一贸易大国,世界第一大外汇储备国, 世界第一大钢铁生产国和世界第一大农业国,世界第一大粮食总产量国以及世界上经济成长最快的国家之一。";tv_des.setText(s);tv_des.setMaxLines(3);tv_des.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {//一般用完之后,立即移除该监听tv_des.getViewTreeObserver().removeGlobalOnLayoutListener(this);minHeight = tv_des.getMeasuredHeight();//获取3行时候的高度tv_des.setMaxLines(Integer.MAX_VALUE);//会全部显示内容tv_des.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {//一般用完之后,立即移除该监听tv_des.getViewTreeObserver().removeGlobalOnLayoutListener(this);maxHeight = tv_des.getMeasuredHeight();//获取总高度if (minHeight == maxHeight) {//最大高度和最小高度一样。说明设置的默认显示行数,已经可以把所有数据全部显示iv_des_arrow.setVisibility(View.GONE);}tv_des.getLayoutParams().height = minHeight;tv_des.requestLayout();//让tv_des显示为3行的高度}});}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_des:case R.id.iv_des_arrow:ValueAnimator desAnimator = null;if (isExpandDes) {desAnimator = ValueAnimator.ofInt(maxHeight, minHeight);} else {desAnimator = ValueAnimator.ofInt(minHeight, maxHeight);}desAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animator) {int currentHeight = (Integer) animator.getAnimatedValue();tv_des.getLayoutParams().height = currentHeight;tv_des.requestLayout();//只有展开动画的时候才需要内容向上滚动,收缩动画的时候是不需要滚动的if (!isExpandDes) {int scrollY = currentHeight - minHeight;scrollView.scrollBy(0, scrollY);}}});desAnimator.setDuration(300);desAnimator.addListener(new DesAnimListener());desAnimator.start();break;}}/*** 描述区域动画的监听** @author Administrator*/class DesAnimListener implements Animator.AnimatorListener {@Overridepublic void onAnimationCancel(Animator arg0) {}@Overridepublic void onAnimationEnd(Animator arg0) {isExpandDes = !isExpandDes;iv_des_arrow.setBackgroundResource(isExpandDes ? R.mipmap.arrow_up : R.mipmap.arrow_down);}@Overridepublic void onAnimationRepeat(Animator arg0) {}@Overridepublic void onAnimationStart(Animator arg0) {}}}

带动画的点击可展开TextView相关推荐

  1. vue伸缩效果_Vue2(三)实现子菜单展开收缩,带动画效果实现方法

    以前做这种操作就是简单的display:block,但现在用户的要求也越来越高,需要美观和动画感. 现在介绍用一种简单的方式来实现子菜单从上向下展开子菜单. 看下效果图: 点开效果: 其实原理比较简单 ...

  2. HTML5动态圆形导航,jQuery带动画特效的圆形导航菜单特效

    这是一款jQuery带动画特效的圆形导航菜单特效.该导航菜单在被点击时,会以动画的方式移动到屏幕中间,并展开为一个圆形菜单,效果非常炫酷. 使用方法 在页面中引入jquery和TweenMax.js的 ...

  3. Android高效率实现弹出带动画效果的对话框,仿照微信对话框效果

    转载请注明出处: http://blog.csdn.net/jakeyangchina/article/details/53423453 看到很多app页面里都有弹出对话框效果,今天使用PopupWi ...

  4. Android实现GridView的item长按拖动删除完美实现(带动画效果)

    领导这几天让做一个项目,就是可以实现像支付宝首页一样的可以长按拖动,删除的界面,以前没做过,领导让我做的时候觉得简直是老虎吃天,无从下手啊,可是领导的任务还是要实现的,没办法,就自己网上找咯,但是网上 ...

  5. 仿支付宝输入支付密码2(带动画)

    由于用对话框做输入支付密码会出现宽度无法充满,这次我用popwindow来做,功能效果更加容易扩展:这次提供源码噢,有兴趣的可以下载去参考下,带动画噢: 先看看效果图把: 主界面只有这么简单,就不多在 ...

  6. Android中RecyclerView点击item展开列表详细内容(超简单实现)

    请注明出处: http://blog.csdn.net/qq_23179075/article/details/79230457 Android中RecyclerView点击item展开列表详细内容( ...

  7. Unity3d中使用自带动画系统制作下雨效果(一)

    之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪. 步 ...

  8. 利用css transition属性实现一个带动画显隐的微信小程序部件

    我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会 ...

  9. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计

    要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight ...

最新文章

  1. 第七篇:并发-恢复机制
  2. 自定义mac的ll命令
  3. notepad拼心形_bat心形代码
  4. 利用fiddler将本地网页放到某个域下
  5. Oracle11gR2-聚簇因子浅析
  6. Microsoft System Center Configuration Manager 2007 工作流中文版
  7. Java 在匿名内部函数中为外部函数变量赋值的解决方案
  8. 代码整洁读书笔记---序,前言,代码猴子
  9. JavaScript高级程序设计(第三版)pdf的下载地址
  10. Steam的Hacknet的账户损坏问题
  11. linux常用的英文单词收集
  12. 计算一元二次方程的解
  13. 为什么Java有GC调优而没听说过有CLR的GC调优?
  14. 科技云报道:云密码,开辟网络安全的新“蓝海”
  15. c语言多进程之进程间通信IPC:信号操作函数之signal,kill
  16. word-spacing letter-spacing white-space 分辨
  17. 服务器操作系统有哪些都怎么读,谁说服务器linux主流?这款操作系统独霸天下...
  18. 综述|基于深度学习的深度图补全
  19. 跟领导怎么相处,怎么找话题,或者说跟自己年长的同事或者上司,怎么沟通?
  20. 一文了解C语言与嵌入式C语言的区别

热门文章

  1. 中国联通网上营业厅,12306式的网站?
  2. windows to go 和 linux to go 制作教程
  3. maven离线模式设置
  4. instanceof
  5. 能源与环境系统工程考研计算机,晁文超老师讲专业—— 能源与环境系统工程...
  6. 【数据库】聚合和排序
  7. @Qualifier的作用
  8. 使用CSS3制作倾斜导航条和毛玻璃效果
  9. insight 后台性能监控小程序开发手记
  10. controller层,service层,mapper层,entity层的作用与联系。