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。

效果图:

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

(0)

相关推荐

  • android TextView不用ScrollViewe也可以滚动的方法

    代码 复制代码 代码如下: TextView textview = (TextView) findViewById(R.id.text);            /**             *              * 只有调用了该方法,TextView才能不依赖于ScrollView而实现滚动的效果.             * 要在XML中设置TextView的textcolor,否则,当TextView被触摸时,会灰掉.             */ textview.setMov

  • android listview 水平滚动和垂直滚动的小例子

    网上有很多解决 android listview 水平和垂直滚动的代码,我没有按照他们说的做(以前没搜到 O(∩_∩)O~) 我采用的是添加HorizontalScrollViewJava代码 复制代码 代码如下: < ScrollView android:id="@+id/ScrollView01" android:layout_height="300px" android:layout_x="16px" android:layout_y

  • Android自定义View实现仿1号店垂直滚动广告条代码

    效果图展示,图片有点卡,耐心看会,原程序是很流畅的 实现步骤: 声明变量 初始化画笔.文本大小和坐标 onMeasure()适配wrap_content的宽高 onDraw()画出根据坐标画出两段Text 监听点击事件 在Activity中实现点击事件 实现原理(坐标变换原理):整个过程都是基于坐标Y的增加和交换进行处理的,Y值都会一直增加到endY,然后进行交换逻辑 步骤一:声明变量 由于1号店是两句话的滚动,所以我们也是使用两句话来实现的 private Paint mPaint; priv

  • Android仿即刻首页垂直滚动图,炫酷到底!

    项目地址:https://github.com/JeasonWong/JikeGallery 话不多说,先上效果. 这个效果是在即刻app上看到,觉得很不错,遂仿之. 先说下我的实现思路(以上方的图片滚动为例,下方的文字实现效果类似): 自定义ViewGroup 装载两个ImageView和一个阴影View 通过一定规律交替控制两个ImageView和它们的marginTop,在onLayout()中实现 marginTop的具体值由属性动画控制,不断调用requestLayout() 接下来依

  • Android控件ViewFlipper仿淘宝头条垂直滚动广告条

    ViewFlipper的使用,仿淘宝头条垂直滚动广告条,供大家参考,具体内容如下 学习,学习,学以致用 ViewFlipper是安卓自带的控件,很多人可能很少知道这个控件,这个控件很简单,也很好理解,能不能用上实战就看你们的本事了.下面是淘宝头条广告的原效果 下面是我们今天要实现的效果,图片是Gif,运行效果是很流畅的,由于这个图片反应有点慢,会浪费大家点时间,所以我把它调快了,大家可以掏出手机打开淘宝看,一模一样的 从源码可以看出,其实ViewFlipper间接的继承了FrameLayout,

  • Android TextView实现垂直滚动效果的方法

    本文实例讲述了Android TextView实现垂直滚动效果的方法.分享给大家供大家参考,具体如下: 在TextView中,如果文本很长,可能需要实现垂直滚动显示文本的效果.这里需要在XML布局文件中为TextView设置如下几个属性. Android:scrollbars="vertical" android:scrollbarStyle="X" 其中X为outsideOverlay或insideOverlay. android:scrollbarFadeDur

  • android开发之横向滚动/竖向滚动的ListView(固定列头)

    由于项目需要,我们需要一个可以横向滚动的,又可以竖向滚动的 表格.而且又要考虑大数据量(行)的展示视图.经过几天的研究终于搞定,做了一个演示.贴图如下:      好吧.让我们看思路是什么样的: 1. 上下滚动直接使用 listView来实现. 2. 左右滚动使用HorizontalScrollView,来处理滚动.我写一个类MyHScrollView继承 自它. 2.1 . ListView里的每行(row)分为 两部分,不滚动的和可滚动的区域.比如本demo的第一列,就是静态的.而后面的所有

  • Android中TextView实现垂直滚动和上下滚动效果

    布局里面就是两个自定义的TextView,上面的左右滑动的是AutoHorizontalScrollTextView; 下面上下滚动的是AutoVerticalScrollTextView; 上面左右滑动的非常好实现,直接把AutoHorizontalScrollTextView复制到项目中,复制全类名到布局文件中,和系统TextView一样,只需设置文本其他什么都不用设置: 下面垂直滚动的AutoVerticalScrollTextView相比AutoHorizontalScrollTextV

  • Android实现Activity水平和垂直滚动条的方法

    本文实例讲述了Android实现Activity水平和垂直滚动条的方法.分享给大家供大家参考,具体如下: <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="

  • android实现上下滚动的TextView

    一 说明    这里重要应用类 AutoTextView,这是一个自定义的类,继承至TextSwitcher,下面临 AutoTextView类做简要说明: 1. 该类应用的重点,在于设置两个动画, setInAnimation(...)  和 setOutAnimation(...),分离是文字进入的动画和文字退出的动画: 2. 类中定义了一个外部类-Rotate3dAnimation,重要靠该类实现文字进出动画,该外部类继承至Animation.说来偶合,这个恰好是在apiDemo中看到了,

随机推荐