一行代码快速实现今日头条 网易新闻焦点图自动循环轮播效果
Posted 编程小石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一行代码快速实现今日头条 网易新闻焦点图自动循环轮播效果相关的知识,希望对你有一定的参考价值。
有时候我们需要顶部焦点图可以自动轮播并且左右滑动时可以循环轮播,下面就来自定义这样的控件来实现,使用起来特别简单
实现功能
1,自动循环轮播,可以设置时间
2,可以手动实现循环滑动
3,可以自定义轮播时圆点大小和颜色
欢迎star
先看效果图
使用起来也特别简单,直接把下面的自定义控件复制到你的项目中,就可以一行代码快速实现自动无限轮播效果了。
一,自定义可以自动轮播的控件
package com.qclautocycleview;
import android.app.Activity;
import android.content.Context;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* 可以自动循环轮播的viewpager控件
* 实现功能
* 1,自动循环轮播,可以设置时间
* 2,可以手动实现循环滑动
*/
public class AutoCycleView extends RelativeLayout
private final static String CYCLE_VIEW = "AtuoCycleView";//打印log用的
private List<String> mViewList;
private ViewPager mViewpage;
private Activity mContext;
private CyclePagerAdapter mAdapter;
private CycleRunable mCycleRunable = new CycleRunable();
private CycleIndexView mCycleIdxView;//圆点
public AutoCycleView(Context context)
super(context);
init(context);
public AutoCycleView(Context context, AttributeSet attrs)
super(context, attrs);
init(context);
public AutoCycleView(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
init(context);
/*
* 初始化
* */
public void init(Context context)
mViewList = new ArrayList<String>();
/*
* 把viewpager和圆点添加到布局中
* */
mViewpage = new ViewPager(context);
LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mViewpage.setLayoutParams(layoutParams);
addView(mViewpage);
mViewpage.setAdapter(mAdapter = new CyclePagerAdapter());
mViewpage.addOnPageChangeListener(new CycleViewChangeListener());
//自定义滑动时的圆点
mCycleIdxView = new CycleIndexView(context);
addView(mCycleIdxView);
/*
* 传入所需的数据
* */
public void setViewList(List<String> viewList, Activity mainActivity)
mContext = mainActivity;
mViewList = viewList;
//增加循环项
mViewpage.setCurrentItem(1);
mAdapter.notifyDataSetChanged();
createIdxView(viewList.size() - 2);//创建和viewpager数据对应的圆点
/*
* 创建所需圆点
* */
public void createIdxView(int size)
if (null != mCycleIdxView)
mCycleIdxView.setViewCount(size);//设置圆点个数
LayoutParams layoutParams = new LayoutParams(mCycleIdxView.getCycleIdxViewWidth(), mCycleIdxView.getCycleIdxViewHeight());
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);//居于底部
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);//水平居中
mCycleIdxView.setLayoutParams(layoutParams);
/*
* 设置自动轮播时间间隔
* */
public void startCycle(long time)
mCycleRunable.setCycleTime(time);
mCycleRunable.startCycle();
/*
* 开启循环
* */
public void startCycle()
mCycleRunable.startCycle();
/*
* viewpager对应的适配器
* */
public class CyclePagerAdapter extends PagerAdapter
public int getCount()
return mViewList.size();
public boolean isViewFromObject(View view, Object object)
return view == object;
public void destroyItem(ViewGroup container, int position, Object object)
container.removeView((View) 使用python-aiohttp爬取今日头条