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


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

相关文章推荐

android自定义带清空内容的TextView

android自定义带清空内容的TextView 代码: /** * 带删除按钮的EditText * @author Administrator * */ public class C...

java面试题10--String--统计大串中小串出现的次数

解题思路:代码实现: /* * 统计大串中小串出现的次数 * 举例: * 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijav...

android Textview 伸缩效果

  • 2014年06月06日 11:11
  • 1.41MB
  • 下载

android Textview 使用之一:伸缩效果

android开发过程中,经常遇到Textview展示不完全的情况。 遇到此情况,通常的处理是: 方案一,Textview添加android:ellipsize属性,让展示不完的部分使用省略号代...

android Textview 使用之一:伸缩效果

android开发过程中,经常遇到Textview

android Textview 使用之一:伸缩效果

装载:http://blog.csdn.net/improveyourself/article/details/28270139 转载没什么别的意思  只是为了自己留下笔记,遇到此类问题可以及时找...

Android之仿美团百度外卖TextView文字伸缩

仿美团百度外卖等软件的TextView文字伸缩功能,类似于商品详情文字伸缩、

android 自定义ScrollView实现背景图片伸缩(仿多米,PaPa个人页面特效也称为阻尼效果)

首先还是按照惯例给大家看下示例.       用过多米音乐的都会知道, 这个UI可以上下滑动,作用嘛---无聊中可以划划解解闷,这被锤子公司老罗称呼为“情怀”,其实叫“情趣”更合适。嘿嘿.如今移动...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android之仿微博Textview的伸缩效果
举报原因:
原因补充:

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