gistfile1.txt package com.example.jie.recyclerviewscall;import android.content.Context;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.util.TypedValue;import android.view.Gravity;import android.view
package com.example.jie.recyclerviewscall; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.TranslateAnimation; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; public class UpDownTextView extends LinearLayout { private Context mContext; private TextView textViews[] = new TextView[3]; private LinearLayout llayout; private DataBean bean = null; /*** * 动画时间 */ private int mAnimTime = 500; /** * 停留时间 */ private int mStillTime = 1500; /*** * 轮播的string */ private ListmTextList; /*** * 当前轮播的索引 */ private int currentIndex = 0; private ItemClick itemClick; public void setItemClick(ItemClick itemClick) { this.itemClick = itemClick; } /*** * 动画模式 */ private int animMode = ANIM_MODE_UP;// 默认向上 0--向上,1--向下 public final static int ANIM_MODE_UP = 0; public final static int ANIM_MODE_DOWN = 1; private TranslateAnimation animationDown, animationUp; public UpDownTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; initViews(); } private void initViews() { llayout = new LinearLayout(mContext); llayout.setOrientation(LinearLayout.VERTICAL); llayout.setGravity(Gravity.CENTER); this.addView(llayout); textViews[0] = addText(); textViews[1] = addText(); textViews[2] = addText(); setGravity(Gravity.CENTER); } /*** * 当界面销毁时 */ @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); stopAutoScroll();// 防止内存泄漏的操作 } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); setViewsHeight(); } /*** * 重新设置VIEW的高度 */ private void setViewsHeight() { for (TextView tv : textViews) { LayoutParams lp = (LayoutParams) tv.getLayoutParams(); lp.height = getHeight(); lp.width = getWidth(); tv.setLayoutParams(lp); } LayoutParams lp2 = (LayoutParams) llayout.getLayoutParams(); lp2.height = getHeight() * (llayout.getChildCount()); lp2.setMargins(0, -getHeight(), 0, 0);// 使向上偏移一定的高度,用padding,scrollTo都分有问题 llayout.setLayoutParams(lp2); } // /////////////////////以下是一些基本的方法textView要用到/////////////////////////////////// public void setGravity(int graty) { for (TextView tv : textViews) { tv.setGravity(graty); } } public void setTextSize(int dpSize) { for (TextView tv : textViews) { tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dpSize); } } public void setTextColor(int color) { for (TextView tv : textViews) { tv.setTextColor(color); } } private TextView addText() { TextView tv = new TextView(mContext); tv.setGravity(Gravity.CENTER); llayout.addView(tv,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return tv; } /*** * 设置初始的字 * * @param curText */ public void setText(final DataBean curText) { this.bean = curText; textViews[1].setText(bean.getName()); Drawable drawable = mContext.getResources().getDrawable(bean.getIcon()); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); textViews[1].setCompoundDrawables(drawable,null,null,null); textViews[1].setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (itemClick != null) { itemClick.onclick(v,curText.getName()); } } }); } /*** * 开始自动滚动 */ public void startAutoScroll() { if (mTextList == null || mTextList.size() == 0) { return; } // 先停止 stopAutoScroll(); this.postDelayed(runnable, mStillTime);// 可用runnable来代替hander或者 timer } /*** * 停止自动滚动 */ public void stopAutoScroll() { this.removeCallbacks(runnable); } private Runnable runnable = new Runnable() { @Override public void run() { currentIndex = (currentIndex) % mTextList.size(); switch (animMode) { case ANIM_MODE_UP: setTextUpAnim(mTextList.get(currentIndex)); break; case ANIM_MODE_DOWN: setTextDownAnim(mTextList.get(currentIndex)); break; } currentIndex++; UpDownTextView.this.postDelayed(runnable, mStillTime + mAnimTime); } }; /*** * 向上弹动画 * * */ public void setTextUpAnim(final DataBean bean) { this.bean = bean; textViews[2].setText(bean.getName()); Drawable drawable = mContext.getResources().getDrawable(bean.getIcon()); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); textViews[2].setCompoundDrawables(drawable, null, null, null); textViews[2].setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (itemClick != null) { itemClick.onclick(v,bean.getName()); } } }); up();// 向上的动画 } public void setTextDownAnim(final DataBean bean) { this.bean = bean; textViews[0].setText(bean.getName()); Drawable drawable = mContext.getResources().getDrawable(bean.getIcon()); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); textViews[0].setCompoundDrawables(drawable, null, null, null); textViews[0].setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (itemClick != null) { itemClick.onclick(v,bean.getName()); } } }); down(); } public void setDuring(int during) { this.mAnimTime = during; } /*** * 向上动画 */ private void up() { llayout.clearAnimation(); if (animationUp == null) animationUp = new TranslateAnimation(0, 0, 0, -getHeight()); animationUp.setDuration(mAnimTime); llayout.startAnimation(animationUp); animationUp.setAnimationListener(listener); } /*** * 向下动画 */ public void down() { llayout.clearAnimation(); if (animationDown == null) animationDown = new TranslateAnimation(0, 0, 0, getHeight()); animationDown.setDuration(mAnimTime); llayout.startAnimation(animationDown); animationDown.setAnimationListener(listener); } /*** * 动画监听,动画完成后,动画恢复,设置文本 */ private AnimationListener listener = new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { setText(bean); } }; public int getAnimTime() { return mAnimTime; } public void setAnimTime(int mAnimTime) { this.mAnimTime = mAnimTime; } public int getStillTime() { return mStillTime; } public void setStillTime(int mStillTime) { this.mStillTime = mStillTime; } public List getTextList() { return mTextList; } public void setTextList(List mTextList) { this.mTextList = mTextList; } public int getCurrentIndex() { return currentIndex; } public void setCurrentIndex(int currentIndex) { this.currentIndex = currentIndex; } public int getAnimMode() { return animMode; } public void setAnimMode(int animMode) { this.animMode = animMode; } public interface ItemClick { void onclick(View view, String id); } }