asp.net网站制作视频教程,阳江网上问政平台,核工业西南建设集团有限公司网站,给手机开发网站吗转载时请注明出处#xff0c;尊重他人的劳动成果#xff0c;谢谢。
废话不多说#xff0c;先上图演示下成果(图有些丑#xff0c;别见怪)#xff1a; 最近一直在研究Scroller类的使用方法#xff0c;看了很多遍别人的例子总是感觉不得要领#xff0c;最后还是自己实践…转载时请注明出处尊重他人的劳动成果谢谢。
废话不多说先上图演示下成果(图有些丑别见怪) 最近一直在研究Scroller类的使用方法看了很多遍别人的例子总是感觉不得要领最后还是自己实践一下这个控件的灵感来源于stackoverflow上一个人的提问就是这种可扩展的TextView当然人家那个很好看那时候感觉很神奇自从知道Scroller这个类之后就拿它来练练手吧大伙可以随意更改它的效果配对了很好看的。
附上代码 package com.sahadev.sildingfinishlayout;import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.TextView;public class ExpandableTextView extends RelativeLayout {private TextView mTextView;private Button mButton;private int mTextViewId 567576458;// 这里注意不要随便填一个简单的数字,可能会和R中的ID冲突造成无效private Scroller mScroller;private int mHeight, mWidthMeasureSpec, mButtonHeight, paddingSize 1;private boolean isExpanded, WSettedFlag, HSettedFlag, onceFlag;private int times 2;// 缩小的倍数,默认2倍public ExpandableTextView(Context context) {this(context, null);}public ExpandableTextView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ExpandableTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mTextView new TextView(context);mTextView.setId(mTextViewId);mButton new Button(context);mButton.setText(扩 展);mScroller new Scroller(context);LayoutParams lp new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);lp.addRule(RelativeLayout.BELOW, mTextViewId);lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);mButton.setOnClickListener(new OnClickListener() {Overridepublic void onClick(View v) {if (!isExpanded) {// 展开来mScroller.startScroll(0, mHeight / times, 0, mHeight / times);postInvalidate();isExpanded true;} else {// 收回去mScroller.startScroll(0, mHeight, 0, -mHeight / times);postInvalidate();isExpanded false;}}});addView(mTextView);addView(mButton, lp);}Overridepublic void computeScroll() {super.computeScroll();if (mScroller.computeScrollOffset()) {mTextView.setHeight(mScroller.getCurrY());postInvalidate();return;}}public void setTimes(int times) {if (times 0) {throw new ArithmeticException(倍数不能为0);}this.times times;}public void setTextViewPadding(int pixels) {mTextView.setPadding(pixels, pixels, pixels, 0);paddingSize pixels;}public void setButtonTips(CharSequence text) {mButton.setText(text);}public void setText(CharSequence text) {mTextView.setText(text);}public void setTextColor(int color) {mTextView.setTextColor(color);}public void setTextSize(float size) {mTextView.setTextSize(size);}public void setBackgroundColor(int color) {mTextView.setBackgroundColor(color);}public void setWidth(int width) {mWidthMeasureSpec width;mTextView.setWidth(width - paddingSize * 2);WSettedFlag true;}public void setHeight(int height) {mHeight (height - mButtonHeight) * 2;HSettedFlag true;}/* onMeasure方法在重绘的时候会一直被调用 */Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);/* 此步骤只用执行一次获取到textView的宽度以及Button的高度以及一些初始化的值 */if (!WSettedFlag) {WSettedFlag true;mWidthMeasureSpec mTextView.getMeasuredWidth();}if (!HSettedFlag) {HSettedFlag true;mHeight mTextView.getMeasuredHeight();OtherTools.showLog(mHeight---- mHeight);}if (!onceFlag) {onceFlag true;mButtonHeight mButton.getMeasuredHeight();OtherTools.showLog(mButtonHeight---- mButtonHeight);// mTextView.setHeight(mHeight / times mButtonHeight // heightMeasureSpec ? heightMeasureSpec - mButtonHeight : mHeight /// times);mTextView.setHeight(mHeight / times);}// int tempHeight mHeight / 2 mButtonHeight;// tempHeight tempHeight heightMeasureSpec ? heightMeasureSpec :// tempHeight;setMeasuredDimension(mWidthMeasureSpec, mButtonHeight mTextView.getMeasuredHeight());}
}RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:idid/slideandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:paddingBottomdimen/activity_vertical_marginandroid:paddingLeftdimen/activity_horizontal_marginandroid:paddingRightdimen/activity_horizontal_marginandroid:paddingTopdimen/activity_vertical_margintools:context.MainActivity com.sahadev.sildingfinishlayout.ExpandableTextViewandroid:idid/helloandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:background#a6c //RelativeLayoutpackage com.sahadev.sildingfinishlayout;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;public class MainActivity extends Activity {private ExpandableTextView textView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);textView (ExpandableTextView) findViewById(R.id.hello);textView.setText(近日多家媒体报道山西最大的民营企业联盛集团董事长邢利斌被警方带据分析邢利斌这次被警方带走很可能和联盛集团债台高筑有关。不过短短几年山西煤老板为何就和金融机构从蜜月期走到了剑拔弩张的田地?);textView.setTextSize(30);textView.setTextColor(Color.WHITE);textView.setTextViewPadding(15);}Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}由于还不太会往GitHub上传东西大家就将就着把代码拷贝运行吧有什么疑问请在下面留言。