垂直跑马灯
//1.自定义View
public class UPMarqueeView extends ViewFlipper {
private Context mContext;
private boolean isSetAnimDuration = false;
private int interval = 2000;
/**
* 动画时间
*/
private int animDuration = 500;
public UPMarqueeView(Context context) {
super(context);
}
public UPMarqueeView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
this.mContext = context;
setFlipInterval(interval);
Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in);
if (isSetAnimDuration) {
animIn.setDuration(animDuration);
}
setInAnimation(animIn);
Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out);
if (isSetAnimDuration) {
animOut.setDuration(animDuration);
}
setOutAnimation(animOut);
}
/**
* 设置循环滚动的View数组
*
* @param views
*/
public void setViews(List<View> views) {
if (views == null || views.size() == 0) {
return;
}
removeAllViews();
for (int i = 0; i < views.size(); i++) {
addView(views.get(i));
}
startFlipping();
}
}
//2.布局
<com.bw.qgs.tb.UPMarqueeView
android:id="@+id/upview1"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
app:layout_constraintBottom_toBottomOf=“parent”
app:layout_constraintLeft_toLeftOf=“parent”
app:layout_constraintRight_toRightOf=“parent”
app:layout_constraintTop_toTopOf=“parent” />
//3.activity界面
public class MainActivity extends AppCompatActivity {
private UPMarqueeView upview1;
List<String> data = new ArrayList<>();
List<View> views = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initParam();
initdata();
initView();
}
/**
* 实例化控件
*/
private void initParam() {
upview1 = (UPMarqueeView) findViewById(R.id.upview1);
}
private void initView() {
setView();
upview1.setViews(views);
}
/**
* 初始化需要循环的View
* 为了灵活的使用滚动的View,所以把滚动的内容让用户自定义
* 假如滚动的是三条或者一条,或者是其他,只需要把对应的布局,和这个方法稍微改改就可以了,
*/
private void setView() {
for (int i = 0; i < data.size(); i = i + 2) {
//设置滚动的单个布局
LinearLayout moreView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.item_view, null);
//初始化布局的控件
TextView tv1 = (TextView) moreView.findViewById(R.id.tv1);
TextView tv2 = (TextView) moreView.findViewById(R.id.tv2);
//进行对控件赋值
tv1.setText(data.get(i).toString());
if (data.size() > i + 1) {
//因为淘宝那儿是两条数据,但是当数据是奇数时就不需要赋值第二个,所以加了一个判断,还应该把第二个布局给隐藏掉
tv2.setText(data.get(i + 1).toString());
}else {
moreView.findViewById(R.id.rl2).setVisibility(View.GONE);
}
//添加到循环滚动数组里面去
views.add(moreView);
}
}
/**
* 初始化数据
*/
private void initdata() {
data = new ArrayList<>();
data.add("家人给2岁孩子喝这个,孩子智力倒退10岁!!!");
data.add("iPhone8最感人变化成真,必须买买买买!!!!");
data.add("简直是白菜价!日本玩家33万甩卖15万张游戏王卡");
data.add("iPhone7价格曝光了!看完感觉我的腰子有点疼...");
data.add("主人内疚逃命时没带够,回废墟狂挖30小时!");
data.add("竟不是小米乐视!看水抢了骁龙821首发了!!!");
}
}
4.anim_marquee_in.xml
<?xml version="1.0" encoding="utf-8"?> 5.anim_marquee_out.xml <?xml version="1.0" encoding="utf-8"?>