通过viewpager+fragment结合FragmentPagerAdapter实现自定义view定时轮转

效果如下:


废话不多说直接上代码

java代码MainActivity.java

public class MainActivity extends FragmentActivity {
	
	private String json = "[{\"title\":\"标题1\",\"content\":\"内容1\", \"url\":\"http://img4.imgtn.bdimg.com/it/u=2250003419,2614712631&fm=23&gp=0.jpg\"},{\"title\":\"标题2\",\"content\":\"内容2\", \"url\":\"http://d.hiphotos.baidu.com/image/h%3D360/sign=8329c3b4acc379316268802fdbc5b784/a1ec08fa513d2697a23709ef56fbb2fb4216d898.jpg\"},{\"title\":\"标题3\",\"content\":\"内容3\", \"url\":\"http://img3.imgtn.bdimg.com/it/u=2120924318,581123095&fm=21&gp=0.jpg\"},{\"title\":\"标题4\",\"content\":\"内容4\", \"url\":\"http://img2.imgtn.bdimg.com/it/u=113769873,3047962235&fm=21&gp=0.jpg\"}]";
	private ViewPager vp;
	private LinearLayout viewGroup;
	private List<Beans> beanList; 
	private ImageView[] imageViews = null;
	private ImageView imageView;
	private int currentItem = 0;
	private ScheduledExecutorService scheduledExecutorService;
	private int[] img = {R.drawable.sy_guidbg_1, R.drawable.adb, R.drawable.sy_guidbg_1, R.drawable.adb};
	
	@SuppressLint("HandlerLeak")
	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			vp.setCurrentItem(msg.what);// 切换当前显示的图片
		};
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		vp = (ViewPager) findViewById(R.id.vp);
		viewGroup = (LinearLayout) findViewById(R.id.viewGroup);
		
		//解析json
		Gson gson = new Gson();
		beanList = gson.fromJson(json, new TypeToken<List<Beans>>(){}.getType());
		initVp();
	}

	private void initVp() {
		// TODO Auto-generated method stub
		viewGroup.removeAllViews();
		imageViews = new ImageView[beanList.size()];
		for (int i = 0; i < beanList.size(); i++) {
			imageView = new ImageView(this);
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
			lp.setMargins(4, 0, 4, 0);
			imageView.setLayoutParams(lp);
			imageView.setLayoutParams(lp);
			imageViews[i] = imageView;
			if (i == 0) {
				imageViews[i]
						.setBackgroundResource(R.drawable.feature_point_cur_1);
			} else {
				imageViews[i].setBackgroundResource(R.drawable.feature_point_1);
			}
			viewGroup.addView(imageViews[i]);
		}
		//装载adapter
		vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
		vp.setOnPageChangeListener(new GuidePageChangeListener());
	}
	
	private class MyAdapter extends FragmentPagerAdapter{
		
		private FragmentManager fm;

		public MyAdapter(FragmentManager fm) {
			super(fm);
			// TODO Auto-generated constructor stub
			this.fm = fm;
		}

		@Override
		public Fragment getItem(int arg0) {
			// TODO Auto-generated method stub
			MyFragment fragment = new MyFragment();
			return fragment;
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			MyFragment fragment = (MyFragment) fm.findFragmentByTag(String.valueOf(position));
			FragmentTransaction ft = fm.beginTransaction();
			//设置背景
			container.setBackgroundResource(img[position]);
			if (fragment != null) {
				ft.attach(fragment);
			} else {
				fragment = (MyFragment) getItem(position);
				ft.add(container.getId(), fragment, String.valueOf(position));
			}
			//传值
			fragment.setBeans(beanList.get(position));
			ft.commitAllowingStateLoss();
			ft = null;
			return fragment;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return beanList.size();
		}
	}
	private class ScrollTask implements Runnable {

		public void run() {
			synchronized (vp) {
				currentItem = (currentItem + 1) % beanList.size();
				handler.sendEmptyMessage(currentItem);
			}
		}
	}

	private final class GuidePageChangeListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int arg0) {

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		@Override
		public void onPageSelected(int arg0) {
			for (int i = 0; i < imageViews.length; i++) {
				imageViews[arg0]
						.setBackgroundResource(R.drawable.feature_point_cur_1);
				if (arg0 != i) {
					imageViews[i]
							.setBackgroundResource(R.drawable.feature_point_1);
				}
			}
		}
	}
	
	@Override
	public void onStart() {
		scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
		scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2,
				TimeUnit.SECONDS);
		super.onStart();
	}

	@Override
	public void onStop() {
		scheduledExecutorService.shutdown();
		super.onStop();
	}
}



</pre>实体Bean</p><p>Beans.java<pre name="code" class="java">public class Beans implements Serializable {

	private String title;
	private String content;
	private String url;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
}
实现自定义布局的fragment

MyFragment.java

public class MyFragment extends Fragment {
	
	private Beans beans;
	private ImageView iv_pic;
	private TextView tv_title, tv_content;
	private ImageLoader imageLoader;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		//定义ImageLoader
		imageLoader = ImageLoader.getInstance();
		imageLoader.init(ImageLoaderConfiguration.createDefault(getActivity()));
		View v = inflater.inflate(R.layout.fragment, null);
		//获取值
		beans = getBeans();
		iv_pic = (ImageView) v.findViewById(R.id.iv_pic);
		tv_title = (TextView) v.findViewById(R.id.tv_title);
		tv_content = (TextView) v.findViewById(R.id.tv_content);
		if(beans != null){
			tv_title.setText(beans.getTitle());
			tv_content.setText(beans.getContent());
			imageLoader.displayImage(beans.getUrl(), iv_pic);
		}
		return v;
	}

	public Beans getBeans() {
		return beans;
	}

	public void setBeans(Beans beans) {
		this.beans = beans;
	}
}

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/rl_vp"
        android:layout_width="match_parent"
        android:layout_height="190dp" >

        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="190dp" />

        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/vp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="-25px"
            android:gravity="right"
            android:orientation="horizontal" >
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>
布局文件fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/iv_pic"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:scaleType="centerCrop"
        android:layout_margin="8dp" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_toRightOf="@id/iv_pic"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000000"
            android:textSize="16sp" />


        <TextView
            android:id="@+id/tv_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp" />
    </LinearLayout>

</RelativeLayout>


如有所需下载地址:http://download.csdn.net/detail/waqdon/8302521
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值