您的位置:首页 > 其它

仿淘宝首页的淘宝头条View垂直滚动

2016-07-21 09:43 351 查看
之前本来是打算做TextView垂直向上滚动的,后来发现一位大神做得很好,https://github.com/sfsheng0322/MarqueeView孙福生大神,然后自己要用到多个View向上滚动,也就是类似淘宝首页头条的那种滚动,所以就按照那个思路想了系啊,可以把View拿来滚动,这样可以自己随意的修改View里面的内容,还比较简单一些。所以这个整个思路就是把View就行循环滚动。

看一下循环滚动View的内容咋写的吧,非常简单。

packagecom.dreamlive.upmarqueeview;

importandroid.content.Context;
importandroid.util.AttributeSet;
importandroid.view.View;
importandroid.view.animation.Animation;
importandroid.view.animation.AnimationUtils;
importandroid.widget.ViewFlipper;

importjava.util.List;

/**
*仿淘宝首页的淘宝头条滚动的自定义View
*
*Createdbydreamliveon2016/7/20.
*/
publicclassUPMarqueeViewextendsViewFlipper{

privateContextmContext;
privatebooleanisSetAnimDuration=false;
privateintinterval=2000;
/**
*动画时间
*/
privateintanimDuration=500;

publicUPMarqueeView(Contextcontext,AttributeSetattrs){
super(context,attrs);
init(context,attrs,0);
}

privatevoidinit(Contextcontext,AttributeSetattrs,intdefStyleAttr){
this.mContext=context;
setFlipInterval(interval);
AnimationanimIn=AnimationUtils.loadAnimation(mContext,R.anim.anim_marquee_in);
if(isSetAnimDuration)animIn.setDuration(animDuration);
setInAnimation(animIn);
AnimationanimOut=AnimationUtils.loadAnimation(mContext,R.anim.anim_marquee_out);
if(isSetAnimDuration)animOut.setDuration(animDuration);
setOutAnimation(animOut);
}

/**
*设置循环滚动的View数组
*
*@paramviews
*/
publicvoidsetViews(List<View>views){
if(views==null||views.size()==0)return;
removeAllViews();
for(inti=0;i<views.size();i++){
addView(views.get(i));
}
startFlipping();
}

}


MainActivity的内容:

packagecom.dreamlive.upmarqueeviewdemo;

importandroid.os.Bundle;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;

importcom.dreamlive.upmarqueeview.UPMarqueeView;

importjava.util.ArrayList;
importjava.util.List;

/**
*仿淘宝首页的淘宝头条滚动的自定义View
*Createdbydreamliveon2016/7/20.
*/
publicclassMainActivityextendsAppCompatActivity{

privateUPMarqueeViewupview1;
List<String>data=newArrayList<>();
List<View>views=newArrayList<>();

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initParam();
initdata();
initView();
}

/**
*实例化控件
*/
privatevoidinitParam(){
upview1=(UPMarqueeView)findViewById(R.id.upview1);
}

/**
*初始化界面程序
*/
privatevoidinitView(){
setView();
upview1.setViews(views);
}

/**
*初始化需要循环的View
*为了灵活的使用滚动的View,所以把滚动的内容让用户自定义
*假如滚动的是三条或者一条,或者是其他,只需要把对应的布局,和这个方法稍微改改就可以了,
*/
privatevoidsetView(){
for(inti=0;i<data.size();i=i+2){
//设置滚动的单个布局
LinearLayoutmoreView=(LinearLayout)LayoutInflater.from(this).inflate(R.layout.item_view,null);
//初始化布局的控件
TextViewtv1=(TextView)moreView.findViewById(R.id.tv1);
TextViewtv2=(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);
}
}

/**
*初始化数据
*/
privatevoidinitdata(){
data=newArrayList<>();
data.add("家人给2岁孩子喝这个,孩子智力倒退10岁!!!");
data.add("iPhone8最感人变化成真,必须买买买买!!!!");
data.add("简直是白菜价!日本玩家33万甩卖15万张游戏王卡");
data.add("iPhone7价格曝光了!看完感觉我的腰子有点疼...");
data.add("主人内疚逃命时没带够,回废墟狂挖30小时!");
//data.add("竟不是小米乐视!看水抢了骁龙821首发了!!!");

}
}

如果在fragment里面出现文本重叠现象,请修改动画时长。

github地址:https://github.com/dreamlivemeng/UpMarqueeTextView-master欢迎star,fork,提pr,issues。遇到问题可以先查看issues是否有人提出过。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: