view向上滚动
之前本来是打算做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();
- }
- }

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首发了!!!");
- }
- }

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向上滚动的更多相关文章
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等. 实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚 ...
- View的滚动原理简单解析
一直对View的滚动了解的不深,说明确了吧也能说出个所以然来,所以我就花了点时间做了一个小小的总结,言归正传,view的滑动分为下面三种: 1)View本身不滚动,指滚动View的内容,这也是View ...
- Android View中滚动相关
方法 scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性: mScrollX, 以下是文档解释 The offset, in pixels ...
- 高仿京东APP首页“京东快报”自己主动向上滚动的广告条
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] 前言 上次在京东APP上买东 ...
- UpMarqueeTextView-模仿淘宝client向上滚动的广告条
UpMarqueeTextView一个简单的向上滚动的相似跑马灯效果,项目中用到的时候是接受到推送过来的消息向上滚动一次.没有做动态的gif效果,所以都是一些纯文字的简单记录. UpMarqueeTe ...
- 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]
/**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...
- 移动手机端H5无缝间歇平滑向上滚动js代码
在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...
- iscroll双重滚动,向上滚动隐藏一部分,下拉后显示
最近项目需求:下面是页面,当用户向上滚动时候,[隐藏的]部分也向上滚动直至消失,这时候[标题]和[搜索框]在最顶部,而[内部的]可以继续滚动,而当[内部的]滚动到最顶部时候,也就是[这个是内部1]时候 ...
- js判断鼠标向上滚动并浮动导航
<div id="Jnav"> <ul class="nav"> <li><a href="#"& ...
随机推荐
- O(n) 筛法求素数
var tot,i,j,k,m,n:longint; prime:array[0..100000] of boolean; p:array[0..100000] of longint;begin re ...
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- C#转摘
尽量用Func和lambda解决函数变量问题,用var, dynamic来解决动态变量问题
- kafka模块概述
简介 kafka主要用于实现低延迟的发送和收集大量的事件和日志数据--通常是活跃的数据(PV.访问记录等),数据以日志形式记录下来,然后由一个专门的系统来进行日志的收集与统计: 吞吐量极高的分布式消息 ...
- 访问API安全性认证设计
1.用户POST登录(账号+密码) | |成功 |2.返回(Private key+时间戳)加密字符串+用户信息+缓存到内存中 | |发起其它请求 |3.发起请求时携带Request参数和(Reque ...
- 探测FTP状态,socket方式
1.FTP返回码列表(哪里都能找到的): 120 Service ready in NNN minutes. 服务在NNN时间内可用 --------------------------------- ...
- 关于新版ADT创建项目时出现appcompat_v7的问题
做Android开发的朋友最近会发现,更新ADT至22.6.0版本之后,创建新的安装项目,会出现appcompat_v7的内容.并且是创建一个新的内容就会出现.这到底是怎么回事呢?原来appcompa ...
- canvas简单图片处理(灰色处理)
反色处理写的比较简单,灰色处理写了一些注释 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- java 默认修饰符
public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问:private的类.类属变量及方法,包内包外 ...
- ORA-03113: end-of-file on communication channel
导致的原因,可能是异常断电导致文件状态不一致. SQL> startupORACLE instance started. Total System Global Area 1653518336 ...