注意: 适配器中,创建页面的方案,可能导致6.0.1手机卡顿
在其他设备中测试正常,这是全xml绘制的通用版本
(动态截图没有效果,欢迎已经自带跳过,这是引导+正式 的演示)
【设计方案】
用户首次使用: 欢迎页+引导页+正式页
老用户使用 : 欢迎页+ 正式页
博客会上传部分代码然后贴网盘地址
链接:http://pan.baidu.com/s/1qXnkQAS 密码:r90g
原理是加入了SharedPreference存储,判断用户是否为首次进入
实现 引导页或者正式页的自动选择,(避免线程堵塞,使用了handle传递数据)
package com.example.viewpager;
import android.Manifest.permission;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
public class Main extends Activity {
private boolean isOK=false; //布尔(默认错)
private static final int TIME=2000;
private static final int Go_HOME=1;
private static final int GO_GUIDE=2;
private Handler mHandler=new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case Go_HOME:
Home();
break;
case GO_GUIDE:
Guide();
break;
}
}};
private void Guide() {//【跳引导页】
Intent intent=new Intent(Main.this,Guide.class);
startActivity(intent);
finish();
}
private void Home() {//【跳主页】
Intent intent=new Intent(Main.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏
setContentView(R.layout.main);
init();
}
public void init(){
SharedPreferences preferences=getSharedPreferences("jike", MODE_PRIVATE); //创建存储文件(模式私有)
isOK=preferences.getBoolean("isOK", true); //获取一个叫isOK的布尔(备用值:对)
if(!isOK){ //如果非对,就发送Handle(主页,2秒后)
mHandler.sendEmptyMessageDelayed(Go_HOME,TIME );
}else{
mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME); //如果对的,就发送Handle(引导,2秒后)
Editor editor=preferences.edit(); //得到它的编辑器
editor.putBoolean("isOK", false); //设定为错
editor.commit(); //tijiao
}
}
}
原理是手写xml页面加入集合,调用写好的适配器,然后加入适配器监听,实现圆点效果:
package com.example.viewpager;
import java.util.ArrayList;
import java.util.List;
import com.adapter.MyAdapter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
public class Guide extends Activity implements OnPageChangeListener,OnClickListener{
private List<View> views;
private ViewPager vp;
private MyAdapter myAdapter;
private ImageView[] ims; //图片控件集合
private int[] ids={R.id.iv1,R.id.iv2,R.id.iv3}; //数组存放图片ID
private Button but1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏
setContentView(R.layout.guide);
intViews();
initDots();
}
//【初始化控件】
private void intViews() {
LayoutInflater inflater=LayoutInflater.from(this);
views=new ArrayList<View>();
views.add(inflater.inflate(R.layout.iv1, null));
views.add(inflater.inflate(R.layout.iv2, null));
views.add(inflater.inflate(R.layout.iv3, null));
myAdapter=new MyAdapter(views, this); //初始化适配器(传入视图数组对象)
vp=(ViewPager) findViewById(R.id.viewpager); //得到多面是视图
vp.setAdapter(myAdapter); //加入适配器
vp.setOnPageChangeListener(this); //加入监听
but1=(Button)views.get(2). findViewById(R.id.start_btn); //最后以一张图,设置按钮,
but1.setOnClickListener(this);
}
//【操作点的方法】
private void initDots(){
ims=new ImageView[views.size()]; //初始化图片控件数组
for(int i=0;i<views.size();i++){ //根据大图数组 for循环得到对应 小圆控件,
ims[i]=(ImageView) findViewById(ids[i]);
}
}
@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<ids.length;i++){ //循环,判断当前页面下标 是否 是当前方法的 (改变anniu)
if(arg0==i){
ims[i].setImageResource(R.drawable.login_point_selected);
}else{
ims[i].setImageResource(R.drawable.login_point);
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_btn:
Intent intent=new Intent(Guide.this, MainActivity.class);
startActivity(intent);
break;
}
}
}
原理:这个适配器只加入官方的四方法,和自己的构造方法
package com.adapter;
import java.util.List;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
public class MyAdapter extends PagerAdapter {
private List<View> views;
private Context context;
//【带参构造方法】
public MyAdapter(List<View> views,Context context) {
this.views=views;
this.context=context;
}
@Override//1数组总长
public int getCount() {
return views.size();
}
@Override//2页面判断
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override//3移除图片
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
@Override// 添加图片
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
}
}
(引导方案2,即将更新,可以在viewpager中加入谷歌提供的动画特效)