Android仿淘宝首页头条View垂直滚动效果
程序员文章站
2023-12-12 16:55:46
之前本来是打算做textview垂直向上滚动的,后来发现一位大神做得很好,https://github.com/sfsheng0322/marqueeview 孙福生大神,...
之前本来是打算做textview垂直向上滚动的,后来发现一位大神做得很好,https://github.com/sfsheng0322/marqueeview 孙福生大神,然后自己要用到多个view向上滚动,也就是类似淘宝首页头条的那种滚动,所以就按照那个思路想了系啊,可以把view拿来滚动,这样可以自己随意的修改view里面的内容,还比较简单一些。所以这个整个思路就是把view就行循环滚动。
看一下循环滚动view的内容咋写的吧,非常简单。
package com.dreamlive.upmarqueeview; import android.content.context; import android.util.attributeset; import android.view.view; import android.view.animation.animation; import android.view.animation.animationutils; import android.widget.viewflipper; import java.util.list; /** * 仿淘宝首页的 淘宝头条滚动的自定义view * * created by dreamlive on 2016/7/20. */ public class upmarqueeview extends viewflipper { private context mcontext; private boolean issetanimduration = false; private int interval = 2000; /** * 动画时间 */ private int animduration = 500; 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(); } }
mainactivity的内容:
package com.dreamlive.upmarqueeviewdemo; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.view.layoutinflater; import android.view.view; import android.widget.linearlayout; import android.widget.textview; import com.dreamlive.upmarqueeview.upmarqueeview; import java.util.arraylist; import java.util.list; /** * 仿淘宝首页的 淘宝头条滚动的自定义view * created by dreamlive on 2016/7/20. */ 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首发了!!!"); } }
github地址:https://github.com/dreamlivemeng/upmarqueetextview-master 欢迎star,fork,提pr,issues。
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。