Android垂直滚动新闻头条

本文介绍了如何在Android项目中创建类似淘宝首页的垂直滚动新闻效果。主要利用ViewFlipper结合自定义View来实现,提供了相关代码示例及github链接供参考。
摘要由CSDN通过智能技术生成

最近做项目要用到淘宝首页头条的那种滚动似的新闻,看了下网上的方法,大概有两种,一种是textview的滚动,另外一种是view的滚动,参考https://github.com/sfsheng0322/MarqueeView,加了自己需求的按照滚动view的思路写了一个,大家可以参考参考;
`package com.lzx.autoverticalviewproject.utils;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ViewFlipper;

import com.lzx.autoverticalviewproject.R;
import com.lzx.autoverticalviewproject.bean.AutoVerticalViewDataData;

import java.util.List;

/**
* Created by Administrator on 2017/4/7.
*/

public class AutoVerticalViewView extends ViewFlipper {
private Context mContext;
/*是否开启动画/
private boolean isSetAnimDuration = false;
/*时间间隔/
private int interval = 3000;
/*动画时间 /
private int animDuration = 500;

public AutoVerticalViewView(Context context) {
    super(context);
    init(context, null, 0);
}
public AutoVerticalViewView(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
 */
public void setViews(final List<AutoVerticalViewDataData> datas) {
    if (datas == null || datas.size() == 0) return;
    removeAllViews();
    int size = datas.size();
    for (int i = 0; i < size; i += 2) {
        final int position = i;
        //根布局
        LinearLayout item = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.item_view, null);
        //设置监听
        item.findViewById(R.id.rl).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClick(position);
                }
            }
        });

        //控件赋值
        ((TextView) item.findViewById(R.id.tv1)).setText(datas.get(position).getValue());
        ((TextView) item.findViewById(R.id.title_tv1)).setText(datas.get(position).getTitle());
        //当数据是奇数时,最后那个item仅有一项
        if (position + 1 < size) {
            item.findViewById(R.id.rl2).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(position+1);
                    }
                }
            });
            ((TextView) item.findViewById(R.id.tv2)).setText(datas.get(position + 1).getValue());
            ((TextView) item.findViewById(R.id.title_tv2)).setText(datas.get(position + 1).getTitle());
        } else item.findViewById(R.id.rl2).setVisibility(View.GONE);
        addView(item);
    }
    startFlipping();
}



private OnItemClickListener onItemClickListener;

/**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值