ViewPager实现淘宝天面首页广告栏,支持左右滑动,自动滑动,带圆点指示器
2015-02-09 15:41
429 查看
ViewPager实现淘宝天面首页广告栏,支持左右滑动,自动滑动,带圆点指示器
原理:1.及根据当前viewpager的选中页面获取position,对其进行自增
2.之后调用:pager.setCurrentItem(currentpositon, true);进行页面切换
3.设置定时器每隔一段时间调用切换页面方法
核心代码如下:
package com.dett.viewpagerautochange;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class ViewPageActivity extends FragmentActivity {
ViewPager pager = null;
/**
* 切換計時器
*/
public Timer autoGallery = new Timer();
public ImageTimerTask timeTaks = null;
public int currentpositon = 0;
public int oldpositon = 0;
private boolean stopAuto;
public static Integer[] imgs = { R.drawable.one, R.drawable.two,
R.drawable.three, R.drawable.four, R.drawable.one };
ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_page);
pager = (ViewPager) findViewById(R.id.myViewPager);
list = new ArrayList<String>();
for (int i = 0; i < imgs.length; i++) {
list.add(imgs[i] + "");
}
ImagePagerAdapter adapter = new ImagePagerAdapter(
getSupportFragmentManager(), list);
pager.setAdapter(adapter);
startAutoChange();
}
/**
* 开启自动切换
* @since 1.0.0
*/
public void startAutoChange(){
// 设置左右缓存页面
pager.setOffscreenPageLimit(2);
// 保证起始页可以左滑
pager.setCurrentItem(list.size() * 1000);
// 可定义页面切换速度
//FixedSpeedScroller.setDurTime(1000, pager);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {
int currentP = index % list.size();
// 更新小点点颜色
changePointView2(oldpositon, currentP);
oldpositon = currentP;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
// 启动计时器
timeTaks = new ImageTimerTask();
autoGallery.scheduleAtFixedRate(timeTaks, 3000, 2000);
addPointView();
// 按下时停止自动滑动,弹起时继续定时滑动
pager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
stopAuto = true;
break;
case MotionEvent.ACTION_UP:
stopAuto = false;
break;
default:
stopAuto = true;
break;
}
return false;
}
});
}
/**
* 计时任务 ImageTimerTask
*/
class ImageTimerTask extends TimerTask {
@Override
public void run() {
if (stopAuto) {
return;
}
Message msg = Message.obtain();
msg.what = 1;
currentpositon = pager.getCurrentItem();
currentpositon++;
han.sendMessage(msg);
}
}
/**
* 设置选中item
*/
Handler han = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
Log.i("eeeeee", currentpositon + "");
pager.setCurrentItem(currentpositon, true);
}
}
};
/**
* 添加小点
*
* @exception
* @since 1.0.0
*/
public void addPointView() {
LinearLayout pointLinear = (LinearLayout) findViewById(R.id.gallery_point_linear);
pointLinear.setBackgroundColor(getResources().getColor(
android.R.color.transparent));// Color.argb(200, 135, 135, 152)
for (int i = 0; i < list.size(); i++) {
ImageView pointView = new ImageView(this);
if (i == 0) {
pointView.setBackgroundResource(R.drawable.feature_point_cur);
} else
pointView.setBackgroundResource(R.drawable.feature_point);
pointLinear.addView(pointView);
}
}
/**
* 改变小点
*
* @exception
* @since 1.0.0
*/
public void changePointView2(int oldposition, int currposition) {
LinearLayout pointLinear = (LinearLayout) findViewById(R.id.gallery_point_linear);
View oldview = pointLinear.getChildAt(oldposition);
View currview = pointLinear.getChildAt(currposition);
if (oldview != null && currview != null) {
ImageView pointView = (ImageView) oldview;
ImageView currView = (ImageView) currview;
pointView.setBackgroundResource(R.drawable.feature_point);
currView.setBackgroundResource(R.drawable.feature_point_cur);
}
}
}
完整demo下载地址
原理:1.及根据当前viewpager的选中页面获取position,对其进行自增
2.之后调用:pager.setCurrentItem(currentpositon, true);进行页面切换
3.设置定时器每隔一段时间调用切换页面方法
核心代码如下:
package com.dett.viewpagerautochange;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class ViewPageActivity extends FragmentActivity {
ViewPager pager = null;
/**
* 切換計時器
*/
public Timer autoGallery = new Timer();
public ImageTimerTask timeTaks = null;
public int currentpositon = 0;
public int oldpositon = 0;
private boolean stopAuto;
public static Integer[] imgs = { R.drawable.one, R.drawable.two,
R.drawable.three, R.drawable.four, R.drawable.one };
ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_page);
pager = (ViewPager) findViewById(R.id.myViewPager);
list = new ArrayList<String>();
for (int i = 0; i < imgs.length; i++) {
list.add(imgs[i] + "");
}
ImagePagerAdapter adapter = new ImagePagerAdapter(
getSupportFragmentManager(), list);
pager.setAdapter(adapter);
startAutoChange();
}
/**
* 开启自动切换
* @since 1.0.0
*/
public void startAutoChange(){
// 设置左右缓存页面
pager.setOffscreenPageLimit(2);
// 保证起始页可以左滑
pager.setCurrentItem(list.size() * 1000);
// 可定义页面切换速度
//FixedSpeedScroller.setDurTime(1000, pager);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {
int currentP = index % list.size();
// 更新小点点颜色
changePointView2(oldpositon, currentP);
oldpositon = currentP;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
// 启动计时器
timeTaks = new ImageTimerTask();
autoGallery.scheduleAtFixedRate(timeTaks, 3000, 2000);
addPointView();
// 按下时停止自动滑动,弹起时继续定时滑动
pager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
stopAuto = true;
break;
case MotionEvent.ACTION_UP:
stopAuto = false;
break;
default:
stopAuto = true;
break;
}
return false;
}
});
}
/**
* 计时任务 ImageTimerTask
*/
class ImageTimerTask extends TimerTask {
@Override
public void run() {
if (stopAuto) {
return;
}
Message msg = Message.obtain();
msg.what = 1;
currentpositon = pager.getCurrentItem();
currentpositon++;
han.sendMessage(msg);
}
}
/**
* 设置选中item
*/
Handler han = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
Log.i("eeeeee", currentpositon + "");
pager.setCurrentItem(currentpositon, true);
}
}
};
/**
* 添加小点
*
* @exception
* @since 1.0.0
*/
public void addPointView() {
LinearLayout pointLinear = (LinearLayout) findViewById(R.id.gallery_point_linear);
pointLinear.setBackgroundColor(getResources().getColor(
android.R.color.transparent));// Color.argb(200, 135, 135, 152)
for (int i = 0; i < list.size(); i++) {
ImageView pointView = new ImageView(this);
if (i == 0) {
pointView.setBackgroundResource(R.drawable.feature_point_cur);
} else
pointView.setBackgroundResource(R.drawable.feature_point);
pointLinear.addView(pointView);
}
}
/**
* 改变小点
*
* @exception
* @since 1.0.0
*/
public void changePointView2(int oldposition, int currposition) {
LinearLayout pointLinear = (LinearLayout) findViewById(R.id.gallery_point_linear);
View oldview = pointLinear.getChildAt(oldposition);
View currview = pointLinear.getChildAt(currposition);
if (oldview != null && currview != null) {
ImageView pointView = (ImageView) oldview;
ImageView currView = (ImageView) currview;
pointView.setBackgroundResource(R.drawable.feature_point);
currView.setBackgroundResource(R.drawable.feature_point_cur);
}
}
}
完整demo下载地址
相关文章推荐
- ViewPager实现淘宝天面首页广告栏,支持左右滑动,自动滑动,带圆点指示器
- 【商城开发二】ViewPager广告自动轮播,自动添加指示器,支持滑动
- 封装自定义ViewPager实现左右自动切换和手势滑动效果
- Android ViewPager实现无限循环(2.加入小圆点,优化自动和手动滑动冲突)
- 利用viewPager实现的自动滑动的广告栏
- 仿淘宝、京东、美团使用ViewPager+GridView实现左右滑动查看更多分类导航功能
- ViewPager+Fragment实现支持左右滑动的Tab
- viewpager左右循环滑动,自动滑动广告栏
- 使用ViewPager实现图片自动播放效果,并可左右滑动
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- 【android】ViewPager的使用——实现左右滑动(下方带圆点)
- 仿淘宝、京东、美团使用ViewPager+GridView实现左右滑动查看更多分类导航功能
- Android 使用ViewPager实现图片左右循环滑动自动播放
- Android ViewPager 无限循环左右滑动(可自动) 实现
- 自定义的带tab的可左右滑动的viewpager之一 简单实现
- android ViewPager,ViewFlipper,ViewFlow实现左右滑动
- 安卓之使用ViewPager实现左右循环滑动
- Android UI开发第二十篇——仿launcher的左右滑动(用ViewPager实现欢迎引导页面)
- viewpager动态绑定数据库数据,并支持动态左右滑动
- 使用ViewPager实现左右循环滑动 总结