欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android仿淘宝首页头条View垂直滚动效果

程序员文章站 2024-02-10 10:55:10
之前本来是打算做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。

效果图:

Android仿淘宝首页头条View垂直滚动效果

Android仿淘宝首页头条View垂直滚动效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。