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);
}

}
};
}


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