android之仿微博Textview的伸缩效果

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值