project中build.gradle文件内:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
module中build.gradle添加依赖:
dependencies {
compile 'com.github.paradoxie:AutoVerticalTextview:0.1'
}
1、自定义view:
package cn.wdf.textview_roll; import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.TextSwitcher; import android.widget.TextView; import android.widget.ViewSwitcher; import java.util.ArrayList; public class VerticalTextview extends TextSwitcher implements ViewSwitcher.ViewFactory { private static final int FLAG_START_AUTO_SCROLL = 0; private static final int FLAG_STOP_AUTO_SCROLL = 1; private float mTextSize = 16; private int mPadding = 5; private int textColor = Color.GREEN; /** * @param textSize 字号 * @param padding 内边距 * @param textColor 字体颜色 */ public void setText(float textSize, int padding, int textColor) { mTextSize = textSize; mPadding = padding; this.textColor = textColor; } private OnItemClickListener itemClickListener; private Context mContext; private int currentId = -1; private ArrayListtextList; private Handler handler; public VerticalTextview(Context context) { this(context, null); mContext = context; } public VerticalTextview(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; textList = new ArrayList (); } public void setAnimTime(long animDuration) { setFactory(this); Animation in = new TranslateAnimation(0, 0, animDuration, 0); in.setDuration(animDuration); in.setInterpolator(new AccelerateInterpolator()); Animation out = new TranslateAnimation(0, 0, 0, -animDuration); out.setDuration(animDuration); out.setInterpolator(new AccelerateInterpolator()); setInAnimation(in); setOutAnimation(out); } /** * 间隔时间 * * @param time */ public void setTextStillTime(final long time) { handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case FLAG_START_AUTO_SCROLL: if (textList.size() > 0) { currentId++; setText(textList.get(currentId % textList.size())); } handler.sendEmptyMessageDelayed(FLAG_START_AUTO_SCROLL, time); break; case FLAG_STOP_AUTO_SCROLL: handler.removeMessages(FLAG_START_AUTO_SCROLL); break; } } }; } /** * 设置数据源 * * @param titles */ public void setTextList(ArrayList titles) { textList.clear(); textList.addAll(titles); currentId = -1; } /** * 开始滚动 */ public void startAutoScroll() { handler.sendEmptyMessage(FLAG_START_AUTO_SCROLL); } /** * 停止滚动 */ public void stopAutoScroll() { handler.sendEmptyMessage(FLAG_STOP_AUTO_SCROLL); } @Override public View makeView() { TextView t = new TextView(mContext); t.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); t.setMaxLines(1); t.setPadding(mPadding, 0, 0, 0); t.setTextColor(textColor); t.setTextSize(mTextSize); t.setClickable(true); t.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (itemClickListener != null && textList.size() > 0 && currentId != -1) { itemClickListener.onItemClick(currentId % textList.size()); } } }); return t; } /** * 设置点击事件监听 * * @param itemClickListener */ public void setOnItemClickListener(OnItemClickListener itemClickListener) { this.itemClickListener = itemClickListener; } /** * 轮播文本点击监听器 */ public interface OnItemClickListener { /** * 点击回调 * * @param position 当前点击ID */ void onItemClick(int position); } }
2、xml布局:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.wdf.textview_roll.MainActivity">
android:id="@+id/mTv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffff"
/>
3、activity中:
在这个类中可以设置字体的大小、颜色和内边距。设置每行TextView停留时长间隔,设置进入和退出的时间间隔。
package cn.wdf.textview_roll; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends Activity { private VerticalTextview TextView; private ArrayListtitleList= new ArrayList (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { TextView=findViewById(R.id.mTv); titleList.add("熬过最难熬的那段时间"); titleList.add("你擦干眼泪终于明白"); titleList.add("有些人"); titleList.add("注定是让你成长的"); titleList.add("正如"); titleList.add("至尊宝在离开紫霞仙子后"); titleList.add("才真正成长为孙悟空一样"); TextView.setTextList(titleList); TextView.setText(22, 50, Color.RED);//设置属性 TextView.setTextStillTime(3000);//设置停留时长间隔 TextView.setAnimTime(1000);//设置进入和退出的时间间隔 TextView.setOnItemClickListener(new VerticalTextview.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(MainActivity.this,"点击了:"+titleList.get(position),Toast.LENGTH_SHORT).show(); } }); } @Override protected void onResume() { super.onResume(); TextView.startAutoScroll(); } @Override protected void onPause() { super.onPause(); TextView.stopAutoScroll(); } }