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

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

  1. package com.dreamlive.upmarqueeview;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.view.View;
  5. import android.view.animation.Animation;
  6. import android.view.animation.AnimationUtils;
  7. import android.widget.ViewFlipper;
  8. import java.util.List;
  9. /**
  10. * 仿淘宝首页的 淘宝头条滚动的自定义View
  11. *
  12. * Created by dreamlive on 2016/7/20.
  13. */
  14. public class UPMarqueeView extends ViewFlipper {
  15. private Context mContext;
  16. private boolean isSetAnimDuration = false;
  17. private int interval = 2000;
  18. /**
  19. * 动画时间
  20. */
  21. private int animDuration = 500;
  22. public UPMarqueeView(Context context, AttributeSet attrs) {
  23. super(context, attrs);
  24. init(context, attrs, 0);
  25. }
  26. private void init(Context context, AttributeSet attrs, int defStyleAttr) {
  27. this.mContext = context;
  28. setFlipInterval(interval);
  29. Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in);
  30. if (isSetAnimDuration) animIn.setDuration(animDuration);
  31. setInAnimation(animIn);
  32. Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out);
  33. if (isSetAnimDuration) animOut.setDuration(animDuration);
  34. setOutAnimation(animOut);
  35. }
  36. /**
  37. * 设置循环滚动的View数组
  38. *
  39. * @param views
  40. */
  41. public void setViews(List<View> views) {
  42. if (views == null || views.size() == 0) return;
  43. removeAllViews();
  44. for (int i = 0; i < views.size(); i++) {
  45. addView(views.get(i));
  46. }
  47. startFlipping();
  48. }
  49. }
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的内容:

  1. package com.dreamlive.upmarqueeviewdemo;
  2. import android.os.Bundle;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.widget.LinearLayout;
  7. import android.widget.TextView;
  8. import com.dreamlive.upmarqueeview.UPMarqueeView;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. /**
  12. * 仿淘宝首页的 淘宝头条滚动的自定义View
  13. * Created by dreamlive on 2016/7/20.
  14. */
  15. public class MainActivity extends AppCompatActivity {
  16. private UPMarqueeView upview1;
  17. List<String> data = new ArrayList<>();
  18. List<View> views = new ArrayList<>();
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. initParam();
  24. initdata();
  25. initView();
  26. }
  27. /**
  28. * 实例化控件
  29. */
  30. private void initParam() {
  31. upview1 = (UPMarqueeView) findViewById(R.id.upview1);
  32. }
  33. /**
  34. * 初始化界面程序
  35. */
  36. private void initView() {
  37. setView();
  38. upview1.setViews(views);
  39. }
  40. /**
  41. * 初始化需要循环的View
  42. * 为了灵活的使用滚动的View,所以把滚动的内容让用户自定义
  43. * 假如滚动的是三条或者一条,或者是其他,只需要把对应的布局,和这个方法稍微改改就可以了,
  44. */
  45. private void setView() {
  46. for (int i = 0; i < data.size(); i = i + 2) {
  47. //设置滚动的单个布局
  48. LinearLayout moreView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.item_view, null);
  49. //初始化布局的控件
  50. TextView tv1 = (TextView) moreView.findViewById(R.id.tv1);
  51. TextView tv2 = (TextView) moreView.findViewById(R.id.tv2);
  52. //进行对控件赋值
  53. tv1.setText(data.get(i).toString());
  54. if (data.size() > i + 1) {
  55. //因为淘宝那儿是两条数据,但是当数据是奇数时就不需要赋值第二个,所以加了一个判断,还应该把第二个布局给隐藏掉
  56. tv2.setText(data.get(i + 1).toString());
  57. }else {
  58. moreView.findViewById(R.id.rl2).setVisibility(View.GONE);
  59. }
  60. //添加到循环滚动数组里面去
  61. views.add(moreView);
  62. }
  63. }
  64. /**
  65. * 初始化数据
  66. */
  67. private void initdata() {
  68. data = new ArrayList<>();
  69. data.add("家人给2岁孩子喝这个,孩子智力倒退10岁!!!");
  70. data.add("iPhone8最感人变化成真,必须买买买买!!!!");
  71. data.add("简直是白菜价!日本玩家33万甩卖15万张游戏王卡");
  72. data.add("iPhone7价格曝光了!看完感觉我的腰子有点疼...");
  73. data.add("主人内疚逃命时没带够,回废墟狂挖30小时!");
  74. //        data.add("竟不是小米乐视!看水抢了骁龙821首发了!!!");
  75. }
  76. }
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。

view向上滚动的更多相关文章

  1. Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)

    在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...

  2. View的滚动原理简单解析

    一直对View的滚动了解的不深,说明确了吧也能说出个所以然来,所以我就花了点时间做了一个小小的总结,言归正传,view的滑动分为下面三种: 1)View本身不滚动,指滚动View的内容,这也是View ...

  3. Android View中滚动相关

    方法   scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性:   mScrollX, 以下是文档解释   The offset, in pixels ...

  4. 高仿京东APP首页“京东快报”自己主动向上滚动的广告条

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] 前言 上次在京东APP上买东 ...

  5. UpMarqueeTextView-模仿淘宝client向上滚动的广告条

    UpMarqueeTextView一个简单的向上滚动的相似跑马灯效果,项目中用到的时候是接受到推送过来的消息向上滚动一次.没有做动态的gif效果,所以都是一些纯文字的简单记录. UpMarqueeTe ...

  6. 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]

    /**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...

  7. 移动手机端H5无缝间歇平滑向上滚动js代码

    在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...

  8. iscroll双重滚动,向上滚动隐藏一部分,下拉后显示

    最近项目需求:下面是页面,当用户向上滚动时候,[隐藏的]部分也向上滚动直至消失,这时候[标题]和[搜索框]在最顶部,而[内部的]可以继续滚动,而当[内部的]滚动到最顶部时候,也就是[这个是内部1]时候 ...

  9. js判断鼠标向上滚动并浮动导航

    <div id="Jnav"> <ul class="nav"> <li><a href="#"& ...

随机推荐

  1. POST在发送数据的时候使用的是HTTP命令

    防止SQL注入 SQL(结构化查询语言)是基于美国国家标准学会(ANSI)标准,并作为共同的语言与数据库通信.每个数据库系统增加了一些专有功能到基本的ANSI SQL. SQL注入是一门将制作好的SQ ...

  2. 20145205 实验一 Java开发环境的熟悉

    实验内容 命令行下Java程序开发 IDEA下Java程序开发.调试 练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) 实现凯撒密码,并进行测试 实验要求 使用JDK编译 ...

  3. IOS网络第四天 -网络文件上传(0923略)

    01-NSURLSession02-断点续传 02-文件上传01-基本的上传 03-文件上传03-代码封装 04-文件上传04-获得MIMEType.mp4 05-文件的压缩和解压缩.mp4 06-压 ...

  4. T2 Func<in T1,out T2>(T1 arg)

    委托调用方法的4种方式. using System; using System.Collections.Generic; namespace ConsoleApplication1 { delegat ...

  5. google protobuf初体验

    最近在读别人代码的时候发现一个的东西,名字叫protobuf, 感觉挺好用的,写在这里,留个记录.那么什么是protobuf 呢?假如您在网上搜索,应该会得到类似这样的文字介绍: Google Pro ...

  6. Xamarin.Android Binding

    0.要绑定的jar库,需要保证编译jar使用的jdk版本,与绑定时xamarin使用的jdk版本一致. 查看编译jar的jdk版本的方法:jar解压后,a.看MANIFEST.MF  b. javap ...

  7. 如何搭建开源code review gerrit服务器

    搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...

  8. 贪吃蛇的java代码分析(三)

    代码剖析 在上一篇文章中,我们完成了贪吃蛇部分代码的构造.回头审视我们写的代码与思路,会发现我们遗漏了一个重要的地方,那就是:贪吃蛇的自身移动.想必大家都知道,贪吃蛇自身是会自己移动的,并且会跟随你的 ...

  9. ThinkCmfX模板常量

    一.public文件: 1.各种js文件,包括cookie.js.ajaxFrom.js等系统自带的js文件 2.simpleboot:bootstrap.图标font文件 二.themes:前端模板 ...

  10. 出售一套Unity ARPG手游源码

    项目已经上线,在越南App Store曾经排名第一.客户端Unity C#开发,Android可以热更新,IOS可以更新资源,服务器 C++ + lua开发,文档齐全,欢迎咨询. QQ:7734952 ...