Android开发之自定义控件--ViewPager

核心代码:
package com.itheima18.viewpager;

import java.util.ArrayList;
import java.util.Timer;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {

	private ViewPager viewPager;
	private TextView title;
	private int[] imageIds;
	private ArrayList
   
   
    
     images;
	private String[] titles;
	private ArrayList
    
    
     
      dots;
	private MyPagerAdapter adapter;

	private int oldPosition = 0;// 上一次圆点的位置
	private ScheduledExecutorService scheduledExecutor;

	private int currentIndex = 0; // 当前页面的位置

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initData();
		initView();
	}

	// 准备初始化数据
	private void initData() {

		// 图片
		imageIds = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,
				R.drawable.d, R.drawable.e };
		// 用来显示的图片
		images = new ArrayList
     
     
      
      ();
		for (int i = 0; i < imageIds.length; i++) {

			ImageView imageView = new ImageView(getApplicationContext());
			imageView.setImageResource(imageIds[i]);

			images.add(imageView);
		}

		// 文字
		titles = new String[] { "巩俐不低俗,我就不能低俗", "扑树又回来啦!再唱经典老歌引万人大合唱",
				"揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };

		// 圆点
		dots = new ArrayList
      
      
       
       ();
		dots.add(findViewById(R.id.dot_0));
		dots.add(findViewById(R.id.dot_1));
		dots.add(findViewById(R.id.dot_2));
		dots.add(findViewById(R.id.dot_3));
		dots.add(findViewById(R.id.dot_4));
	}

	private void initView() {
		viewPager = (ViewPager) findViewById(R.id.viewPager);
		title = (TextView) findViewById(R.id.title);

		title.setText(titles[0]);

		adapter = new MyPagerAdapter();
		viewPager.setAdapter(adapter);

		viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
	}

	private class MyOnPageChangeListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onPageSelected(int position) {
			// 记录当前页面
			currentIndex = position;
			// 文字更新
			title.setText(titles[position % images.size()]);
			// 圆点更新
			// 更新当前页面为白色的圆点
			dots.get(position % images.size()).setBackgroundResource(
					R.drawable.dot_focused);
			// 更新上一个页面为灰色的圆点
			dots.get(oldPosition % images.size()).setBackgroundResource(
					R.drawable.dot_normal);
			// 更新上一个页面的位置
			oldPosition = position;
		}

	}

	private class MyPagerAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			// return images.size();
			return Integer.MAX_VALUE;
		}

		// 判断当前页面显示的数据 与 新页面的数据是否相同
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

		// 初始化数据
		@Override
		public Object instantiateItem(ViewGroup viewPager, int position) {
			// TODO Auto-generated method stub
			// viewPager.addView(images.get(position));
			viewPager.addView(images.get(position % images.size()));
			return images.get(position % images.size());
		}

		// 销毁数据
		@Override
		public void destroyItem(ViewGroup viewPager, int position, Object object) {
			// TODO Auto-generated method stub
			// super.destroyItem(container, position, object);

			viewPager.removeView(images.get(position % images.size()));
		}
	}

	@Override
	protected void onStart() {
		super.onStart();
		// 启动切换图片
		scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
		scheduledExecutor.scheduleAtFixedRate(new MyPagerTask(), 2, 2,
				TimeUnit.SECONDS);
	}

	// 切换图片任务类
	private class MyPagerTask implements Runnable {

		@Override
		public void run() {
			// 切换页面
			// currentIndex = (currentIndex + 1) % images.size();
			currentIndex++;
			// viewPager.setCurrentItem(item);//设置当前页面
			// 更新UI Handler
			handler.sendEmptyMessage(0);

		}
	}

	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// super.handleMessage(msg);
			// 切换viewPager当前页面
			viewPager.setCurrentItem(currentIndex);
		}
	};

	@Override
	protected void onStop() {
		super.onStop();
		// 停止切换图片
		scheduledExecutor.shutdown();
	}

}

      
      
     
     
    
    
   
   
 
布局文件:

    
    

	
     
     
		
	    
      
      
	    
      
      

	    
      
      
	        
	        
       
       
	        
	        
       
       
	            
        
        
	            
        
        
	            
        
        
	            
        
        
	            
        
        
	        
       
       
	    
      
      
	
     
     

    
    
 
效果图:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值