ViewPager实现引导界面以及进入下一个activity解决办法

来源:互联网 发布:数据分析报表 编辑:程序博客网 时间:2024/04/29 07:19
这次项目中实现了用户引导滑动图片,到最后一张图片的时候,我认为理想的是同时具备以下两点:

1)用户可以点击上面的“开始使用”这样的按钮可以进入主界面;

2)用户接着滑动下一个图片的手势而进入主界面;

3)用户在引导界面点击返回键的时候直接进入主界面;


增加“开始使用”按钮方式:

可以定义一个layout的xml再加载:一个LinearLayout,里面一个button。默认button是“gone”,

xml如下:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/guide_item"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <TextView  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_weight="5" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/start"  
  15.         android:layout_width="fill_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="@string/guide_start"  
  18.         android:visibility="gone" >  
  19.     </Button>  
  20.   
  21.     <TextView  
  22.         android:layout_width="fill_parent"  
  23.         android:layout_height="wrap_content"  
  24.         android:layout_weight="1" />  
  25.   
  26. </LinearLayout>  

button上下增加了textview,我是为了控制button在整个界面的位置。

引导的图片是其背景即可。

实现如下:

guide_activity.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <android.support.v4.view.ViewPager  
  7.         android:id="@+id/guide_view"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent" />  
  10.   
  11. </LinearLayout>  

GuideActivity.java:


[java] view plaincopy
  1. /** 
  2.  * 引导界面 
  3.  * @author maria 
  4.  * 2012-07-19 
  5.  */  
  6. package com.maria.test;  
  7.   
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10. import com.trunkbow.talker.R;  
  11. import android.app.Activity;  
  12. import android.content.Context;  
  13. import android.content.Intent;  
  14. import android.os.Bundle;  
  15. import android.os.Parcelable;  
  16. import android.support.v4.view.PagerAdapter;  
  17. import android.support.v4.view.ViewPager;  
  18. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  19. import android.util.DisplayMetrics;  
  20. import android.view.GestureDetector;  
  21. import android.view.KeyEvent;  
  22. import android.view.LayoutInflater;  
  23. import android.view.MotionEvent;  
  24. import android.view.View;  
  25. import android.view.GestureDetector.SimpleOnGestureListener;  
  26. import android.view.View.OnClickListener;  
  27. import android.widget.Button;  
  28. import android.widget.LinearLayout;  
  29.   
  30. public class GuideActivity extends Activity {  
  31.     private ViewPager viewPager;  
  32.     private List<View> mImageViews; // 滑动的图片集合  
  33.     private int[] imageResId; // 图片ID  
  34.     private int currentItem = 0// 当前图片的索引号  
  35.     private GestureDetector gestureDetector; // 用户滑动  
  36.     /** 记录当前分页ID */  
  37.     private int flaggingWidth;// 互动翻页所需滚动的长度是当前屏幕宽度的1/3  
  38.   
  39.     @Override  
  40.     public void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.         setContentView(R.layout.guide_activity);  
  43.         gestureDetector = new GestureDetector(new GuideViewTouch());  
  44.   
  45.         // 获取分辨率  
  46.         DisplayMetrics dm = new DisplayMetrics();  
  47.         getWindowManager().getDefaultDisplay().getMetrics(dm);  
  48.         flaggingWidth = dm.widthPixels / 3;  
  49.   
  50.         imageResId = new int[] { R.drawable.guide_1, R.drawable.guide_2 };  
  51.   
  52.         mImageViews = new ArrayList<View>();  
  53.   
  54.         // 初始化图片资源  
  55.         LayoutInflater viewInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  56.         // 0  
  57.         View convertView0 = viewInflater.inflate(R.layout.guide_item, null);  
  58.         LinearLayout linearLayout0 = (LinearLayout) convertView0  
  59.                 .findViewById(R.id.guide_item);  
  60.         linearLayout0.setBackgroundResource(imageResId[0]);  
  61.         mImageViews.add(linearLayout0);  
  62.         // 1  
  63.         View convertView1 = viewInflater.inflate(R.layout.guide_item, null);  
  64.         LinearLayout linearLayout1 = (LinearLayout) convertView1  
  65.                 .findViewById(R.id.guide_item);  
  66.         linearLayout1.setBackgroundResource(imageResId[1]);  
  67.         Button btn = (Button) convertView1.findViewById(R.id.start);  
  68.         btn.setVisibility(View.VISIBLE);  
  69.         btn.setOnClickListener(new OnClickListener() {  
  70.   
  71.             public void onClick(View v) {  
  72.                 // TODO Auto-generated method stub  
  73.                 GoToMainActivity();  
  74.             }  
  75.         });  
  76.         mImageViews.add(linearLayout1);  
  77.   
  78.         viewPager = (ViewPager) findViewById(R.id.guide_view);  
  79.         viewPager.setAdapter(new MyAdapter());// 设置填充ViewPager页面的适配器  
  80.         // 设置一个监听器,当ViewPager中的页面改变时调用  
  81.         viewPager.setOnPageChangeListener(new MyPageChangeListener());  
  82.     }  
  83.   
  84.     @Override  
  85.     public boolean dispatchTouchEvent(MotionEvent event) {  
  86.         if (gestureDetector.onTouchEvent(event)) {  
  87.             event.setAction(MotionEvent.ACTION_CANCEL);  
  88.         }  
  89.         return super.dispatchTouchEvent(event);  
  90.     }  
  91.   
  92.     private class GuideViewTouch extends SimpleOnGestureListener {  
  93.         @Override  
  94.         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
  95.                 float velocityY) {  
  96.             if (currentItem == 1) {  
  97.                 if (Math.abs(e1.getX() - e2.getX()) > Math.abs(e1.getY()  
  98.                         - e2.getY())  
  99.                         && (e1.getX() - e2.getX() <= (-flaggingWidth) || e1  
  100.                                 .getX() - e2.getX() >= flaggingWidth)) {  
  101.                     if (e1.getX() - e2.getX() >= flaggingWidth) {  
  102.                         GoToMainActivity();  
  103.                         return true;  
  104.                     }  
  105.                 }  
  106.             }  
  107.             return false;  
  108.         }  
  109.     }  
  110.   
  111.     /** 
  112.      * 进入主界面 
  113.      */  
  114.     void GoToMainActivity() {  
  115.         Intent i = new Intent(GuideActivity.this, MainActivivty.class);  
  116.         startActivity(i);  
  117.         finish();  
  118.     }  
  119.   
  120.     /** 
  121.      * 当ViewPager中页面的状态发生改变时调用 
  122.      *  
  123.      * @author Administrator 
  124.      *  
  125.      */  
  126.     private class MyPageChangeListener implements OnPageChangeListener {  
  127.   
  128.         /** 
  129.          * This method will be invoked when a new page becomes selected. 
  130.          * position: Position index of the new selected page. 
  131.          */  
  132.         public void onPageSelected(int position) {  
  133.             currentItem = position;  
  134.         }  
  135.   
  136.         public void onPageScrollStateChanged(int arg0) {  
  137.         }  
  138.   
  139.         public void onPageScrolled(int arg0, float arg1, int arg2) {  
  140.         }  
  141.     }  
  142.   
  143.     /** 
  144.      * 填充ViewPager页面的适配器 
  145.      *  
  146.      * @author Administrator 
  147.      *  
  148.      */  
  149.     private class MyAdapter extends PagerAdapter {  
  150.   
  151.         @Override  
  152.         public int getCount() {  
  153.             return imageResId.length;  
  154.         }  
  155.   
  156.         @Override  
  157.         public Object instantiateItem(View arg0, int arg1) {  
  158.             ((ViewPager) arg0).addView(mImageViews.get(arg1));  
  159.             return mImageViews.get(arg1);  
  160.         }  
  161.   
  162.         @Override  
  163.         public void destroyItem(View arg0, int arg1, Object arg2) {  
  164.             ((ViewPager) arg0).removeView((View) arg2);  
  165.         }  
  166.   
  167.         @Override  
  168.         public boolean isViewFromObject(View arg0, Object arg1) {  
  169.             return arg0 == arg1;  
  170.         }  
  171.   
  172.         @Override  
  173.         public void restoreState(Parcelable arg0, ClassLoader arg1) {  
  174.   
  175.         }  
  176.   
  177.         @Override  
  178.         public Parcelable saveState() {  
  179.             return null;  
  180.         }  
  181.   
  182.         @Override  
  183.         public void startUpdate(View arg0) {  
  184.   
  185.         }  
  186.   
  187.         @Override  
  188.         public void finishUpdate(View arg0) {  
  189.   
  190.         }  
  191.     }  
  192.   
  193.     @Override  
  194.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  195.         // TODO Auto-generated method stub  
  196.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  197.             GoToMainActivity();  
  198.             return false;  
  199.         }  
  200.         return super.onKeyDown(keyCode, event);  
  201.     }  
  202.   
  203. }  



原创粉丝点击