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