Android开发之TextView垂直显示List列表数据

自定义控件
packagecom.nskj.zhiyinglicai.myView;

importandroid.content.Context;

importandroid.content.res.TypedArray;
importandroid.graphics.Camera;
importandroid.graphics.Color;
importandroid.graphics.Matrix;
importandroid.util.AttributeSet;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.animation.AccelerateInterpolator;
importandroid.view.animation.Animation;
importandroid.view.animation.Transformation;
importandroid.widget.TextSwitcher;
importandroid.widget.TextView;
importandroid.widget.ViewSwitcher;

importcom.nskj.zhiyinglicai.R;


/**
*TODO 向上滚动TextView
*
*@authorZhaoQy
*/
public classScollViewTextView extends TextSwitcher implementsViewSwitcher.ViewFactory {

private floatmHeight;
privateContext mContext;
// mInUp,mOutUp分别构成向下翻页的进出动画
privateRotate3dAnimation mInUp;
privateRotate3dAnimation mOutUp;

// mInDown,mOutDown分别构成向下翻页的进出动画
privateRotate3dAnimation mInDown;
privateRotate3dAnimation mOutDown;

publicScollViewTextView(Context context) {
this(context,null);
}

publicScollViewTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.auto3d);
mHeight=20;
a.recycle();
mContext= context;
init();
}

private voidinit() {
setFactory(this);
mInUp= createAnim(true,true);
mOutUp= createAnim(false,true);

// TextSwitcher主要用于文件切换,比如 从文字A 切换到 文字 B,
// setInAnimation()后,A将执行inAnimation,
// setOutAnimation()后,B将执行OutAnimation
setInAnimation(mInUp);
setOutAnimation(mOutUp);
}

privateRotate3dAnimation createAnim(booleanturnIn,booleanturnUp) {
finalRotate3dAnimation rotation =newRotate3dAnimation(turnIn, turnUp);
// 动画持续时间
rotation.setDuration(300);
rotation.setFillAfter(false);
rotation.setInterpolator(newAccelerateInterpolator());
returnrotation;
}

// 这里返回的TextView,就是我们看到的View
@Override
publicView makeView() {
TextView t =newTextView(mContext);
t.setGravity(Gravity.LEFT);
t.setTextSize(16);
t.setMaxLines(1);
t.setPadding(0,5,0,5);
// 设置文字颜色
t.setTextColor(Color.WHITE);
returnt;
}

// 定义动作,向下滚动翻页
public voidprevious() {
if(getInAnimation() != mInDown) {
setInAnimation(mInDown);
}
if(getOutAnimation() != mOutDown) {
setOutAnimation(mOutDown);
}
}

// 定义动作,向上滚动翻页
public voidnext() {
if(getInAnimation() != mInUp) {
setInAnimation(mInUp);
}
if(getOutAnimation() != mOutUp) {
setOutAnimation(mOutUp);
}
}

classRotate3dAnimationextendsAnimation {
private floatmCenterX;
private floatmCenterY;
private final booleanmTurnIn;
private final booleanmTurnUp;
privateCameramCamera;

publicRotate3dAnimation(booleanturnIn,booleanturnUp) {
mTurnIn= turnIn;
mTurnUp= turnUp;
}

@Override
public voidinitialize(intwidth,intheight,intparentWidth,intparentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
mCamera=newCamera();
mCenterY= getHeight() / 2;
mCenterX= getWidth() / 2;
}

@Override
protected voidapplyTransformation(floatinterpolatedTime, Transformation t) {

final floatcenterX = mCenterX;
final floatcenterY = mCenterY;
finalCamera camera = mCamera;
final intderection = mTurnUp?1: -1;

finalMatrix matrix = t.getMatrix();

camera.save();
if(mTurnIn) {
camera.translate(0.0f, derection *mCenterY* (interpolatedTime - 1.0f),0.0f);
}else{
camera.translate(0.0f, derection *mCenterY* (interpolatedTime), 0.0f);
}
camera.getMatrix(matrix);
camera.restore();

matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
}
}
}

xml文件

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<com.nskj.zhiyinglicai.myView.ScollViewTextView
android:id="@+id/tv_integral_draw_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:textStyle="bold"
android:gravity="center|left"
android:layout_marginLeft="10dp"
android:textColor="@android:color/white"
android:orientation="vertical"/>

</LinearLayout>


JavaBean文件

importjava.io.Serializable;

public classDrawMessageimplementsSerializable {
privateStringname;
privateStringmessage;

publicDrawMessage() {
}

publicDrawMessage(String name, String message) {
this.name= name;
this.message= message;
}

publicString getName() {
returnname;
}

public voidsetName(String name) {
this.name= name;
}

publicString getMessage() {
returnmessage;
}

public voidsetMessage(String message) {
this.message= message;
}
}

activity中应用

public classIntegralDrawActivityextendsCommonActivity {
private List<DrawMessage> drawMessageList;
private int mTextCount;
private Handler mHandler=newHandler();
List<String> list;

@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_integral_draw);
initView();
}

public void initView(){
drawMessageList=newArrayList<>();
drawMessageList.add(newDrawMessage("陌xx","电视机"));
drawMessageList.add(newDrawMessage("陌78","电视机4259"));
drawMessageList.add(newDrawMessage("陌37656","电视45686机"));
drawMessageList.add(newDrawMessage("陌15638+","电576视机"));

for (inti =0; i <drawMessageList.size(); i++){
String str =drawMessageList.get(i).getName() +":获得"+drawMessageList.get(i).getMessage();
list.add(str);
}
mTextCount=list.size();
mHandler.postDelayed(runnable,2000);
}
Runnable runnable=newRunnable() {
@Override
public voidrun() {
tv_integral_draw_message.next();
mTextCount++;
if(mTextCount>= Integer.MAX_VALUE){
mTextCount=list.size();
}
tv_integral_draw_message.setText(list.get(mTextCount% (list.size())));
if(list.size() >1) {
mHandler.postDelayed(this,2000);
}

}
};
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章