关于学习android中v4包中PagerAdapter实现引导页效果

</pre>刚进公司,菜鸟一只,今天给自己规定的任务是学习如何开发一个项目的引导页,废话不多说,通过今天学习,算是了解了。<p></p><p>首先需要创建一个GuideActivity ,来填充买个引导页的View。由于用的公司框架,所以有些地方可能不同。不过大概内容没什么不同。</p><p></p><p><pre name="code" class="html"><pre name="code" class="java">package com.xinhua.xinhuashe.option.guide;

import java.util.ArrayList;
import java.util.Timer;


public class NewGuideActivity extends ParentActivity {

	private ViewPager guide_vp;
	private Button guide_btn;
	private NewGuidePageAdater newguidePageAdater;
	private Timer timer;
	private TimerTask timerTask;
	private boolean timerIsRun = false;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		MobileApplication.allActivity.add(this);
		
		//创建一个填充器
		LayoutInflater inflater = LayoutInflater.from(NewGuideActivity.this);
		View view1 = inflater.inflate(R.layout.guide_view1, null);
		View view2 = inflater.inflate(R.layout.guide_view2, null);
		View view3 = inflater.inflate(R.layout.guide_view3, null);
		//创建一个list集合,存放三个view对象
		ArrayList<View> array = new ArrayList<View>();
		array.add(view1);
		array.add(view2);
		array.add(view3);
		
		newguidePageAdater = new NewGuidePageAdater(array);
		
		guide_vp.setAdapter(newguidePageAdater);
		//对viewpager 建立监听,当在第三页时进行计时,然后完成自动跳转
		guide_vp.setOnPageChangeListener(changeListener);
		//对第三张中的button设置监听 跳转
		guide_btn = (Button) view3.findViewById(R.id.guide_btn);
		guide_btn.setOnClickListener(listener);
	}
	private OnPageChangeListener changeListener = new OnPageChangeListener() {
		
		@Override
		public void onPageSelected(int arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onPageScrolled(int position, float arg1, int arg2) {

			//timerIsRun 防止进来来回切换计时器混乱 只进行一次延迟执行
			if (position==2&&!timerIsRun) {
				timer.schedule(timerTask, 3000, 500);
				timer.cancel();
				timerTask.cancel();
				timerIsRun = true;
			}
			
		}
		
		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}
	};
	//按钮跳转
	private OnClickListener listener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			handler.sendEmptyMessage(0);
			timerTask.cancel();
			timer.cancel();
		}
	};
	@Override
	protected int getLayoutId() {
		return R.layout.guide;
	}

	@Override
	protected void setupViews() {
		guide_vp = (ViewPager) findViewById(R.id.guide_viewpager);
	}

	@Override
	protected void initialized() {
		timer = new Timer();
		timerTask = new TimerTask() {
			
			@Override
			public void run() {
				handler.sendEmptyMessage(0);
				timer.cancel();
				timerTask.cancel();
			}
		};

	}
	private Handler handler = new Handler(new Handler.Callback() {
		
		@Override
		public boolean handleMessage(Message msg) {
			Intent intent = new Intent(NewGuideActivity.this, SlidingMenuControlActivity.class);
			startActivity(intent);
			NewGuideActivity.this.finish();
			return true;
		}
	});

	@Override
	protected void threadTask() {

	}

}

 下面是guideXml文件 

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

    <android.support.v4.view.ViewPager 
        android:id="@+id/guide_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />
    
    <com.xinhua.xinhuashe.view.FlowIndicator
        android:id="@id/homepage_header_FlowIndicator"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dip"
        app:count="3"
        app:point_normal_color="#45000000"
        app:point_radius="3dip"
        app:point_seleted_color="@color/white"
        app:point_size="5dip"
        app:space="10dip" />

</RelativeLayout>
上面页面中
com.xinhua.xinhuashe.view.FlowIndicator这个控件是自定义的,以后等我研究懂了会粘出来,大家要用的时候可以将它删了。

下面是三个layout页面

<?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" >
    
	<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/guide_1" />
</LinearLayout>

只粘一个,剩下两个一样。

下面是PageAdater 的代码



import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;


public class NewGuidePageAdater extends PagerAdapter {
	private ArrayList<View> listView;

	//构造方法
	public NewGuidePageAdater(ArrayList<View> listView) {
		this.listView = listView;
	}

	//获取要滑动控件的数量,这里就应该是我们所传进来listView的size
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return listView.size();
	}

	//来判断是否显示的是同一张图片,我们传进arg0==arg1即可
	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		// TODO Auto-generated method stub
		return arg0==arg1;
	}

	//PagerAdapter只缓存三张图片,当大于三张是调用此方法销毁图片
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(listView.get(position));
	}

	//当显示的图片可以进行缓存时,则调用此方法
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(listView.get(position));
		return listView.get(position);
	}
	

}
有什么地方模糊的,可以提出来 ,大家一起讨论,或者我给解答。谢谢




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值