`
zhengaihua
  • 浏览: 21748 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ViewPager无限自动轮播

阅读更多
package com.bwie.view;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity {
	List<View> views=new ArrayList<View>();
	private ViewPager vp;
	private LinearLayout ll_dot;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		vp = (ViewPager) findViewById(R.id.vp);
		ll_dot=(LinearLayout)findViewById(R.id.ll_dot);
		init();
		loaddot();
		vp.setAdapter(adapter);
		vp.setCurrentItem(views.size()*100000);
		sendmesg();
		vp.setOnPageChangeListener(listener);
	}
	Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			int item=vp.getCurrentItem();
			item++;
			vp.setCurrentItem(item);
			sendEmptyMessageDelayed(0, 2000);
		}
	};
	private void sendmesg() {
		handler.sendEmptyMessageDelayed(0, 2000);
	}
	OnPageChangeListener listener=new OnPageChangeListener() {
		@Override
		public void onPageSelected(int arg0) {
			for (int i = 0; i < imgs.size(); i++) {
				if(arg0%imgs.size()==i){
					imgs.get(i).setImageResource(R.drawable.dot_fouces);
				}else{
					imgs.get(i).setImageResource(R.drawable.dot_normal);
				}
			}
		}
		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}
		@Override
		public void onPageScrollStateChanged(int arg0) {
		}
	};
	public void init(){
		View v1=View.inflate(this, R.layout.v1, null);
		View v2=View.inflate(this, R.layout.v2, null);
		View v3=View.inflate(this, R.layout.v3, null);
		View v4=View.inflate(this, R.layout.v4, null);
		View v5=View.inflate(this, R.layout.v5, null);
		views.add(v1);
		views.add(v2);
		views.add(v3);
		views.add(v4);
		views.add(v5);
	}
	public void loaddot(){
		imgs = new ArrayList<ImageView>();
		imgs.clear();
		for (int i = 0; i < views.size(); i++) {
			ImageView iView=new ImageView(this);
			if(i==0){
				iView.setImageResource(R.drawable.dot_fouces);
			}else{
				iView.setImageResource(R.drawable.dot_normal);
			}
			LayoutParams params=new LayoutParams(20, 20);
			params.setMargins(5, 0, 5, 0);
			ll_dot.addView(iView, params);
			imgs.add(iView);
		}
	}
	PagerAdapter adapter=new PagerAdapter() {
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0==arg1;
		}
		
		@Override
		public int getCount() {
			return Integer.MAX_VALUE;
		}
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			View view= views.get(position%views.size());
			view.setOnTouchListener(new OnTouchListener() {
				
				@Override
				public boolean onTouch(View v, MotionEvent event) {
					switch (event.getAction()) {
					case MotionEvent.ACTION_DOWN:
						handler.removeCallbacksAndMessages(null);
						break;
					case MotionEvent.ACTION_UP:
						handler.sendEmptyMessageDelayed(0, 2000);
						break;
					case MotionEvent.ACTION_CANCEL:
						handler.sendEmptyMessageDelayed(0, 2000);
						break;
					default:
						break;
					}
					return true;
				}
			});
			container.addView(view);
			return views.get(position%views.size());
		}
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView((View) object);
		}
	};
	private List<ImageView> imgs;
}

 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
	<corners android:radius="8dp"></corners>
	<solid android:color="#fff"></solid>
</shape>

 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
	<corners android:radius="8dp"></corners>
	<solid android:color="#88000000"></solid>
</shape>

 

分享到:
评论

相关推荐

    android 使用viewpager实现图片轮播,左右可以无限制滑动

    在Android开发中,实现一个美观且功能完善的...以上就是使用`ViewPager`实现图片轮播,包括自动轮播和左右无限制滑动的详细步骤。这个解决方案已经经过验证,可以放心使用。记得根据实际需求调整代码,以适应你的项目。

    ViewPager多种无限轮播

    通过上述步骤,我们就能实现一个功能完备的ViewPager无限轮播效果。无论是自定义的适配器,还是自动轮播机制,都是为了提供流畅且无边界的用户体验。在实际开发中,可以根据项目需求灵活调整和扩展这些实现。

    ViewPager实现图片自动轮播无限循环(完美流畅版)

    本教程将详细讲解如何利用ViewPager实现图片自动轮播并做到无限循环,同时确保流畅性。 首先,我们需要理解ViewPager的基本用法。ViewPager是Android Support Library的一部分,它可以让你在水平方向上滑动浏览多个...

    ViewPager实现图片自动轮播和无限循环(完美流畅)

    本知识点将详细介绍如何利用ViewPager实现图片自动轮播和无限循环的效果,使得用户体验更加流畅。 首先,ViewPager的自动轮播功能主要依赖于一个定时器(Timer)和一个定时任务(TimerTask)。定时器负责定期触发...

    无限循环viewPager 自动轮播修正版

    这个是是修正版,之前那个资源有bug,完美仿照网易云音乐首页图片无限轮播,触摸停止轮播,松开几秒后继续播放,非常好的实例。

    ViewPager无限循环轮播

    总之,实现ViewPager无限循环轮播的关键在于理解ViewPager的工作原理,以及如何通过自定义适配器和监听器来控制页面的加载和切换。在实际开发中,可以根据具体需求调整和优化这些步骤,以实现更加复杂或定制化的功能...

    ViewPager(无限轮播)

    在这个自定义的ViewPager实现中,我们着重讨论如何让它具备无限轮播功能,支持手动滑动和自动播放。 1. **无限轮播**: 为了实现无限轮播,我们需要在数据源中添加首尾元素的副本。当用户向左滑动到最后一个页面时...

    viewPager自定义自动轮播组件

    在这个主题中,我们将深入探讨如何自定义一个`ViewPager`实现自动轮播组件。下面将详细讲解相关知识点。 首先,我们来看`ViewPager`的基本用法。`ViewPager`继承自` ViewGroup`,它允许用户通过左右滑动来切换不同...

    无限循环viewPager 自动轮播

    通过研究和理解这段代码,你将能够掌握如何在Android应用中构建一个高效且用户友好的无限循环ViewPager自动轮播功能。这个实例不仅可以应用于音乐应用,还可以广泛应用于新闻、广告等需要轮播效果的场景。

    Viewpager 自动轮播(无限循环) ,手动滑动时停止轮播+底部小圆点

    本Demo重点展示了如何实现ViewPager的自动轮播功能,结合无限循环和手动滑动时的智能暂停,同时还有底部动态小圆点的显示,来指示当前展示的页面。以下将详细介绍这些知识点。 **1. ViewPager自动轮播** 要实现...

    viewpager无限自动循环demo,

    【标题】:ViewPager无限自动循环实现教程 在Android开发中,`ViewPager`是一个非常常用的组件,它用于展示可滑动的页面,常用于实现类似轮播图的效果。本教程将详细讲解如何创建一个无限自动循环的`ViewPager` ...

    安卓ViewPager广告轮播图实现无限轮播

    在这个“安卓ViewPager广告轮播图实现无限轮播”的示例中,我们将深入探讨如何利用ViewPager创建一个能够自动无限循环的广告轮播效果。 首先,ViewPager的核心在于其`PagerAdapter`的实现。在这里,我们需要创建一...

    viewpager无限自动轮询图

    在本篇文章中,我们将深入探讨如何利用`ViewPager`实现无限自动轮播图,以及与之相关的技术点。 首先,我们要明白`ViewPager`的核心原理。`ViewPager`通过`PagerAdapter`来管理页面,它会根据用户滑动的行为加载或...

    Viewpager无限轮播Demo

    在这个"ViewPager无限轮播Demo"中,我们将探讨如何利用ViewPager实现一个自动循环播放的效果,这在很多应用场景中都非常常见,如广告轮播、图片展示等。以下是关于这个主题的详细解释: 1. **ViewPager基本概念**:...

    viewpager+handle自动无限轮播广告条

    `ViewPager`是Android提供的一个用于展示多个页面并可滑动切换的视图,而`Handler`则用于处理消息循环和延迟执行任务,它们结合可以实现广告图片的自动轮播效果。下面我们将详细探讨如何利用这两者来构建这样的功能...

    viewPager实现轮播图Demo

    为了实现自动轮播,我们可以使用Handler和Runnable。在Runnable中,我们改变ViewPager的当前位置,并在处理完一次自动滑动后重新调度自身。同时,需要在Activity的生命周期方法中管理这个Runnable,防止内存泄漏。 ...

    Android viewpager网络加载图片无限自动轮播demo

    在这个“Android viewpager网络加载图片无限自动轮播demo”中,开发者已经实现了一个功能强大的轮播器,它不仅可以从网络上加载图片,还能自动进行无限循环播放,为用户带来流畅的视觉体验。以下将详细介绍这个demo...

    Android使用viewpager实现自动无限轮播图

    "Android 使用 ViewPager 实现自动无限轮播图" Android 中的 ViewPager 是一个非常实用的控件,可以用来实现各种类型的滑动效果,而自动无限轮播图正是其中的一种常见应用场景。下面将详细介绍如何使用 ViewPager ...

    banner::fire::fire:ViewPager,ViewPager2无限轮播功能。自定义Indicator,支持一屏三页,支持仿魅族banner效果。极其简单的使用方式

    支持自动轮播 支持一屏三页 支持自定义Indicator 支持自定义view 支持垂直滚动 支持任意RecyclerView.adapter 目前就4个类,良好的代码封装,更多请参考代码实现。 ViewPager2是androidx中的 还在使用support请使用...

    安卓图片轮播广告轮播自动滚屏相关-基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView.rar

    1. **ViewPager无限循环**:常规的ViewPager会在达到最后一个页面后停止,但为了实现轮播效果,我们需要让它能从第一个页面无缝过渡到最后一个页面,反之亦然,即实现无限循环。这通常通过复制数据集并在两端添加...

Global site tag (gtag.js) - Google Analytics