本文为大家分享了AndroID实现带动画效果的可点击展开TextVIEw 制作代码,效果图:
收起(默认)效果:
@H_502_7@
点击展开后的效果:
源码:
布局:
<?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) { } }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是内存溢出为你收集整理的Android实现带动画效果的可点击展开TextView全部内容,希望文章能够帮你解决Android实现带动画效果的可点击展开TextView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)