赋料扬雄敌,诗看子建亲。这篇文章主要讲述一行代码快速实现今日头条 网易新闻焦点图自动循环轮播效果相关的知识,希望能为你提供帮助。
有时候我们需要顶部焦点图可以自动轮播并且左右滑动时可以循环轮播,下面就来自定义这样的控件来实现,使用起来特别简单
实现功能
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
@Override
public int getCount()
return mViewList.size();
@Override
public boolean isViewFromObject(View view, Object object)
return view == object;
@Override
public void destroyItem(ViewGroup container, int position, Object object)
container.removeView((View)
推荐阅读
- MySQL随机数据填充工具 mysql_random_data_load
- web期末网站设计大作业(鲜花网站设计——鲜花礼品在线购物网站设计(21页) HTML+CSS+JavaScript web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作
- 一行代码实现安卓照片选取上传服务器,并适配安卓7.0无法调起相机的问题
- 安卓调用系统自带分享功能分享文字,分享大图片,仿好奇心日报分享长图片(不用申请微信微博官方sdk就能直接分享)
- mysql日志
- 怎么把数据集的输出值转换成只含有0,1的标签向量
- Unity WebView 插件 | 浏览器插件3D WebView 专栏介绍
- 斯坦福机器学习-第三周(分类,逻辑回归,过度拟合及解决方法)
- Java中的I/O流