#引导方案(一)#

注意: 适配器中,创建页面的方案,可能导致6.0.1手机卡顿
在其他设备中测试正常,这是全xml绘制的通用版本

#引导方案(一)#_第1张图片
(动态截图没有效果,欢迎已经自带跳过,这是引导+正式 的演示)

【设计方案】
用户首次使用: 欢迎页+引导页+正式页
老用户使用 : 欢迎页+ 正式页
博客会上传部分代码然后贴网盘地址
链接: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中加入谷歌提供的动画特效)

你可能感兴趣的:(#引导方案(一)#)