ViewPager左右滑动,自动循环播放

本文介绍如何使用ViewPager组件在Android应用中实现自动循环播放图片广告的功能,包括布局设计、代码实现以及自动播放与手动滑动切换的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用ViewPager实现:一个图片广告的播放,可自动循环播放,也可手动左右滑动,

 

布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <android.support.v4.view.ViewPager
	        android:id="@+id/pager"
	        android:layout_width="match_parent"
	        android:layout_height="match_parent"/>
     <RelativeLayout 
         android:layout_width="match_parent"
         android:layout_height="match_parent">
     <LinearLayout
	      android:layout_width="wrap_content"
	      android:layout_height="wrap_content"
	      android:orientation="horizontal"
	      android:id="@+id/pointgroup"
	      android:layout_alignParentBottom="true"
	      android:layout_marginBottom="15dp"
	      android:layout_centerHorizontal="true">
     </LinearLayout>
     </RelativeLayout>
</FrameLayout>


 代码:

<pre class="html" name="code">         private ViewPager pager;
	private List<ImageView> imgList;//要播放的图片
	private List<Bitmap> bitmapList;//从各种地方获取的图片
	private LinearLayout pointGroup;//指示点
	private ImageView image;
	private int index = 0;
	boolean isAutoPlay = true; //自动播放,当手指滑动时改为FALSE
<pre class="html" name="code">public void updateViewPager(){
		pager = (ViewPager) view.findViewById(R.id.pager);
		pointGroup = (LinearLayout) view.findViewById(R.id.pointgroup);
		imgList=new ArrayList<ImageView>();//要播放的图片
		try {
			bitmapList=FileOperator.GetImageAD(PlatformAttribute.getFilePrefix()+ "imagead");
		} catch (FalconmeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		for (int i = 0; i < bitmapList.size(); i++) {
			// 初始化图片资源
			image = new ImageView(getActivity());
			image.setScaleType(ScaleType.FIT_XY);
			LinearLayout.LayoutParams imgParam = new LinearLayout.LayoutParams(
					LinearLayout.LayoutParams.WRAP_CONTENT,
					LinearLayout.LayoutParams.WRAP_CONTENT);
			imgParam.height=220;//设置图片的高度
			image.setLayoutParams(imgParam);
			Bitmap bitmap= bitmapList.get(i);
			image.setImageBitmap(bitmap);
			imgList.add(image);//将得到的图片加到图片
			
			// 添加指示点
			ImageView point = new ImageView(getActivity());
			LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
					LinearLayout.LayoutParams.WRAP_CONTENT,
					LinearLayout.LayoutParams.WRAP_CONTENT);
			params.rightMargin=5;//设置指示点之间的距离
			params.height=10;
			params.width=10;
			point.setLayoutParams(params);
			
			//如果显示的是第一页,则将第一个指示点点亮,其他的指示点为默认状态
			if (i == 0) {
				point.setImageResource(R.drawable.white_off);
			} 
			else{
				point.setImageResource(R.drawable.white_on);
			}
			pointGroup.addView(point);//将指示点加到显示的LinearLayout
		}
		
		pager.setAdapter(new MyPagerAdapter());
		pager.setOnPageChangeListener(new OnPageChangeListener() {
			@Override
			public void onPageSelected(int position) {
				// TODO Auto-generated method stub
				//改变指示点的状态
				for(int i=0;i<imgList.size();i++){
					if(i==position){
						ImageView imgPoint=(ImageView)pointGroup.getChildAt(position);
						imgPoint.setImageResource(R.drawable.white_off);
						break;
					}
					
				}
				//设置没有在当前页面的指示点
				for(int i=0;i<imgList.size();i++){
					ImageView imgPoint=(ImageView)pointGroup.getChildAt(i);
					if(i==position){
						continue;
					}
					else{
						imgPoint.setImageResource(R.drawable.white_on);
					}
				}
				index=position;
			}
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub	
				//arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。
				switch (arg0) { 
				case 1:
				isAutoPlay = false; 
				break; 
				case 2:
				isAutoPlay = true; 
				break;
				case 0:
				isAutoPlay = true; 
				break; 
				}
			}
		});
	}
	
	private class MyPagerAdapter extends PagerAdapter {
		public int getCount() {
			return imgList.size();
		}
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(imgList.get(position));
			return imgList.get(position);
		}
		public boolean isViewFromObject(View view, Object object) {
			if(view == object){
				return true;
			}else{
				return false;
			}
		}
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView((View) object);
			object = null;
		}
	}
	
	
	
	public class TimeThread extends Thread {         
		@Override         
		public void run () {            
			do {                 
				try {                      
					Thread.sleep(1000*3); 
					if(isAutoPlay){
						Message msg = new Message(); 
						msg.what = 1;  
						mHandler.sendMessage(msg); 
					}
				}catch (InterruptedException e) {
					e.printStackTrace();
					}
				} while(true);
			}
		}
	@SuppressLint("HandlerLeak")
	private Handler mHandler = new Handler() { 
		@SuppressLint("SimpleDateFormat")
		@Override 
		public void handleMessage (Message msg) { 
			super.handleMessage(msg); 
			switch (msg.what) { 
			case 1: 
				index+=1;
				if(index==imgList.size()){
					index=0;
				}
				pager.setCurrentItem(index,false);
				break;
			default:
				break;
				}
			}
		};

}


 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值