android之仿微博Textview的伸缩效果

原创 2015年11月18日 01:07:44
package com.example.testdemo;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils.TruncateAt;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

	public static final String MainActivity = "MainActivity";
	/** 默认展示最大行数3行 */
	private static final int VIDEO_CONTENT_DESC_MAX_LINE = 3;
	/** 扩充 */
	private static final int SHOW_CONTENT_NONE_STATE = 0;//
	/** 收缩状态 */
	private static final int SHRINK_UP_STATE = 1;//
	/** 展开状态 */
	private static final int SPREAD_STATE = 2;// 展开状态
	/** 默认收起状态 */
	private static int mState = SHRINK_UP_STATE;// 默认收起状态

	/** 展示文本内容 */
	private TextView mContentText;//
	/** 展示更多 */
	private RelativeLayout rlMoreParent;//
	/** 展开 */
	private ImageView mImageSpread;//
	/** 收起 */
	private ImageView mImageShrinkUp;//

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initData();
	}

	private void initView() {
		mContentText = (TextView) findViewById(R.id.text_content);
		rlMoreParent = (RelativeLayout) findViewById(R.id.show_more);
		mImageSpread = (ImageView) findViewById(R.id.spread);
		mImageShrinkUp = (ImageView) findViewById(R.id.shrink_up);
		rlMoreParent.setOnClickListener(this);

	}

	private void initData() {
		// 超过3行 其实是8行
		setTextViewText(mContentText, getString(R.string.txt_info));
		// 3行
		// setTextViewText(mContentText,
		// "苹果公司在美国旧金山召开2014年度全球开发者大会。在全球开发者大会之前,就有预测称此次苹果会有一些硬件产品亮相,甚至是iWatch智能手表、iPhone 6,因为");
		// 1行
		// setTextViewText(mContentText, "asdhfahsdhf");
	}

	/**
	 * 
	 * be used for :设置是否可伸缩
	 * 
	 * @author zhongwr
	 * @2015-11-18
	 * @param mContentText
	 * @param content
	 */
	private void setTextViewText(TextView mContentText, String content) {
		mContentText.setText(content);
		// 等待textview绘画完后,linecount才会准确,否则首次获取都是0
		mContentText.post(new StrecthRunnable(mContentText));
	}

	class StrecthRunnable implements Runnable {
		private TextView tvStrecth;

		public StrecthRunnable(TextView tvStrecth) {
			this.tvStrecth = tvStrecth;
		}

		@Override
		public void run() {
			if (isStrecthShrink(tvStrecth)) {
				tvStrecth.setMaxLines(VIDEO_CONTENT_DESC_MAX_LINE);
				tvStrecth.setEllipsize(TruncateAt.END);
				rlMoreParent.setVisibility(View.VISIBLE);
				mImageShrinkUp.setVisibility(View.GONE);
				mImageSpread.setVisibility(View.VISIBLE);
			} else {
				rlMoreParent.setVisibility(View.GONE);
			}
		}

	}

	/**
	 * 
	 * be used for :判断是否内容够长,以至于达到伸缩效果
	 * 
	 * @author zhongwr
	 * @2015-11-18
	 * @param mContentText
	 */
	private boolean isStrecthShrink(TextView mContentText) {
		int lines = mContentText.getLineCount();
		Log.d(MainActivity, "lines =" + lines);
		if (lines > VIDEO_CONTENT_DESC_MAX_LINE) {// 大于3行才有伸缩效果
			return true;
		} else {
			return false;
		}
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.show_more: {
			if (mState == SPREAD_STATE) {// 收缩:由展开到收缩的操作
				mContentText.setMaxLines(VIDEO_CONTENT_DESC_MAX_LINE);
				mContentText.requestLayout();
				mImageShrinkUp.setVisibility(View.GONE);
				mImageSpread.setVisibility(View.VISIBLE);
				mState = SHRINK_UP_STATE;
			} else if (mState == SHRINK_UP_STATE) {// 展开:有收缩到展开的操作
				mContentText.setMaxLines(Integer.MAX_VALUE);
				mContentText.requestLayout();
				mImageShrinkUp.setVisibility(View.VISIBLE);
				mImageSpread.setVisibility(View.GONE);
				mState = SPREAD_STATE;
			}
			break;
		}
		default: {
			break;
		}
		}
	}

}


资源下载:伸缩效果demo资源下载

借鉴:http://blog.csdn.net/improveyourself/article/details/28270139


版权声明:本文为博主原创文章,未经博主允许不得转载。

TextView显示更多的实现

看了很多的文章后
  • LuckChouDog
  • LuckChouDog
  • 2014年07月02日 12:49
  • 1827

仿QQ空间TextView显示文本、收起(在ListView中实现)

  • 2015年10月14日 21:39
  • 2.18MB
  • 下载

android 仿新浪微博发现效果

新浪微博发现效果 最开始写这个效果借鉴过两个例子,这两个都有坑,我总结下避免踩坑。 1,自定义 Behavior -仿新浪微博发现页的实现,链接地址:http://blog.csdn.net/g...
  • bac_123_abc
  • bac_123_abc
  • 2018年01月03日 10:03
  • 118

android开发实现微博正文效果、顶部悬浮、ScrollView嵌套ListView

先来看一下效果图 从图中不难看出,我这里使用了ScrollView嵌套ListView的方式来实现的这种效果。 这里我们需要重写一下ScrollView,代码如下:package com.gs...
  • android_hl
  • android_hl
  • 2016年06月26日 14:52
  • 1622

仿微博、人人的feed详情页面:Listview上下滑动,导航栏view可吸附在顶部的效果。

首先,谢谢原作者! 一、实现效果 上图: 效果图.gif Github: https://github.com/qizhenghao/StickyNavigationBar 欢迎...
  • u014628886
  • u014628886
  • 2017年03月28日 21:27
  • 739

Android仿微博、人人Feed详情页吸附导航栏

仿微博、人人的feed详情页面:Listview上下滑动,导航栏view可吸附在顶部的效果。一、实现效果上图:Github: https://github.com/qizhenghao/StickyN...
  • qizhenghao
  • qizhenghao
  • 2017年03月27日 19:53
  • 628

安卓仿饿了么、美团外卖、百度外卖下单界面,头布局可收缩

最近在看一些外卖App的时候,觉得商家下单界面效果还挺不错的,想着了解一下这种功能是怎么实现的。第一想到的就是度娘,不过在百度这个功能的时候好像度娘不够给力,应该是我的搜索方式不对。几经搜寻,找到了一...
  • qq_23418393
  • qq_23418393
  • 2017年04月14日 11:29
  • 1863

Android自定义View系列之可伸缩的TextView

在写博客之前,告诉大家一个消息,我开通了自己的微信公众账号,如果你喜欢我的文章,希望关注我的微信公众号,我会定期与大家分享最新的博客文章,以及移动互联网最新动态。 我的微信公众号:yuanzeyao...
  • yuanzeyao2008
  • yuanzeyao2008
  • 2015年10月13日 21:40
  • 10147

android之仿微博Textview的伸缩效果

package com.example.testdemo; import android.app.Activity; import android.os.Bundle; import android...
  • zhongwn
  • zhongwn
  • 2015年11月18日 01:07
  • 1294

Android之仿今日头条顶部导航栏效果

随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以...
  • HanTangSongMing
  • HanTangSongMing
  • 2015年01月07日 09:11
  • 45936
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android之仿微博Textview的伸缩效果
举报原因:
原因补充:

(最多只允许输入30个字)