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

 更新时间:2020年06月23日 17:12:44   作者:搬运工小孟  
这篇文章主要为大家详细介绍了Android仿淘宝首页头条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(); 
 } 
 
 
}

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获取其他应用中的assets资源

    Android获取其他应用中的assets资源

    今天小编就为大家分享一篇关于Android获取其他应用中的assets资源,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Android WindowManager深层理解view绘制实现流程

    Android WindowManager深层理解view绘制实现流程

    WindowManager是Android中一个重要的Service,是全局且唯一的。WindowManager继承自ViewManager。WindowManager主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等
    2022-11-11
  • Android 实现IOS 滚轮选择控件的实例(源码下载)

    Android 实现IOS 滚轮选择控件的实例(源码下载)

    这篇文章主要介绍了 Android 实现IOS 滚轮选择控件的实例(源码下载)的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android布局技巧之include、merge与ViewStub标签的巧用

    Android布局技巧之include、merge与ViewStub标签的巧用

    Android 官方提供了三个用来优化布局的标签,分别是include、merge与ViewStub,下面这篇文章主要给大家介绍了关于Android布局技巧之include、merge与ViewStub标签巧用的相关资料,需要的朋友可以参考下
    2018-06-06
  • android 大图片拖拽并缩放实现原理

    android 大图片拖拽并缩放实现原理

    android 大图片拖拽缩放有利于用户体验,在开发过程中经常使用到,这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助
    2013-01-01
  • Android MVP模式ListView中嵌入checkBox的使用方法

    Android MVP模式ListView中嵌入checkBox的使用方法

    这篇文章主要介绍了Android MVP模式ListView中嵌入checkBox的使用方法,如何在ListView中嵌入checkBox配合使用,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android 8.0实现发送通知

    Android 8.0实现发送通知

    这篇文章主要为大家详细介绍了Android 8.0实现发送通知,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • android应用开发之spinner控件的简单使用

    android应用开发之spinner控件的简单使用

    Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表。本文通过脚本之家平台给大家介绍android应用开发之spinner控件的简单使用,感兴趣的朋友可以参考下
    2015-11-11
  • Android Retrofit2数据解析代码解析

    Android Retrofit2数据解析代码解析

    这篇文章主要介绍了Android Retrofit2数据解析代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Android开发获取短信的内容并截取短信

    Android开发获取短信的内容并截取短信

    本文给大家介绍android开发获取短信内容并截取短息的相关内容,本文代码简单易懂,感兴趣的朋友一起学习吧
    2015-12-12

最新评论