Android实现带动画效果的可点击展开TextView

本文为大家分享了Android实现带动画效果的可点击展开TextView 制作代码,效果图:

收起(默认)效果:

点击展开后的效果:

源码:

布局:

<?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; @Override protected 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() { @Override public void onGlobalLayout() { //一般用完之后,立即移除该监听 tv_des.getViewTreeObserver().removeGlobalOnLayoutListener(this); minHeight = tv_des.getMeasuredHeight();//获取3行时候的高度 tv_des.setMaxLines(Integer.MAX_VALUE);//会全部显示内容 tv_des.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public 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行的高度 } }); } }); } @Override public 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() { @Override public 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 { @Override public void onAnimationCancel(Animator arg0) { } @Override public void onAnimationEnd(Animator arg0) { isExpandDes = !isExpandDes; iv_des_arrow.setBackgroundResource(isExpandDes ? R.mipmap.arrow_up : R.mipmap.arrow_down); } @Override public void onAnimationRepeat(Animator arg0) { } @Override public void onAnimationStart(Animator arg0) { } } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-10-25 00:43:36

Android实现带动画效果的可点击展开TextView的相关文章

android标题栏下面弹出提示框(一) TextView实现,带动画效果

产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现,做着之后发现如果用popupwindow实现的话,从标题栏下面弹出就比较麻烦. 2.最外层的布局本来是用LinearLayout去实现的,然后标题栏跟弹出的那个TextView外边包裹一层RelativeLayout,这样就会有一个问题,父布局RelativeLayout高度就是标题栏高度,提示框

android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示的提示需要在标题栏上面弹出提示框,然后用动画去显示隐藏,并且在大部分Activity上都要显示. 问题1:用上次那个TextView隐藏在布局文件中肯定不行了,不然每个activity都要修改,于是决定用PopupWindow,只要显示在activity的根布局上就行. 问题2:需要把显示Popup

Android学习笔记(25):带动画效果的View切换ViewAnimator及其子类

ViewAnimator可以实现带动画效果的View切换,其派生的子类是一些带动画效果切换功能的组件.     ViewAnimator支持的XML属性:   Attribute Name Description android:animateFirstView 设置显示第一个View组件时是否使用动画 android:inAnimation 设置显示组件时使用的动画 android:outAnimation 设置隐藏组件时使用的动画   1. ViewSwitcher视图切换组件. 添加视图的

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

     要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight属性的合理运用,关于android:layout_weight属性的讲解,可以参考:<我的Android进阶之旅------>关于android:layout_weight属性的一个面试题> 地址为:http://blog.csdn.net/ouyang_peng/article/

纯CSS3实现带动画效果导航菜单无需js

随着互联网的发展,网页能表现的东西越来越多.由最开始单纯的文字和链接构成的网页,到后来的表格布局,再到div+css模式,现在发展到了 html+css3.网页能表达的东西越来越多,css3兴起已经很多年了,不多由于国内网站要求对IE的兼容,html5+css3的发展很缓慢. html5+css3的出现给前端开发者提供了更多的可能性,以前很多只能通过JS实现的效果用纯粹的css3就能实现了. 下面介绍一个博主在css3学习过程中写的一个纯css3实现的带动画效果的导航菜单. 下面是效果图:  

jQuery实现带动画效果的二级下拉导航方法

 这篇文章主要介绍了jQuery实现带动画效果的二级下拉导航方法,涉及jQuery操作css样式及鼠标事件的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了jQuery实现带动画效果的二级下拉导航方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/x

基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)_jquery

这是一款基于jQuery的弹出对话框插件,这个jQuery对话框插件的最大特点是弹出和关闭都带有非常炫酷的动画特效,比如旋转飞入.上下抖动飞入等.效果图如下: 效果演示     源码下载 html代码: <div class="container"> <h1>jQuery gDialog Plugin Exampels</h1> <button class="btn demo-1">Alert Dialog Box&l

jQuery实现带动画效果的多级下拉菜单代码_jquery

本文实例讲述了jQuery实现带动画效果的多级下拉菜单代码.分享给大家供大家参考.具体如下: 这是一款基于jQuery实现的多级下拉菜单,带动画效果,所有的元素以ul li ul li ul li的循环格式嵌套 如果没有下级分类 就用li a结束嵌套,代码内不用toggle()的原因是为了在收缩菜单的时候同时也将该菜单的下级菜单以后的所有元素都隐藏. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-animate-style-dow

Jquery实现带动画效果的经典二级导航菜单_jquery

导航菜单比较实用,当然还是选择经典的,代码最少的,效果最好的喽,各位童鞋请围观哦,废话不说, 效果图如下,欢迎评价: 看代码: 复制代码 代码如下: <!DOCTYPE html > <html> <head> <title>一款带动画效果的经典二级导航菜单Jquery特效</title> <meta name="author" content="Jquery" /> <meta name