android viewpager 滑动分页以及禁止划屏 (模拟新浪)

来源:互联网 发布:印尼酒店网络怎么样 编辑:程序博客网 时间:2024/06/09 02:51

 这一篇将之加工一下,模拟实现新浪里面的功能,vierpager 分页.

    在新浪微博消息一栏中是这样的(注意看title):

                

   

上部分页栏可以用gridview来实现,不过为了省事在这就用textview代替了.

 贴出代码:

[java] view plaincopy
  1. /*** 
  2.  * ViewPager 
  3.  *  
  4.  * @author zhangjia 
  5.  *  
  6.  */  
  7. public class MainActivity extends ActivityGroup implements OnClickListener {  
  8.     private LinearLayout layout;// title  
  9.     private ViewPager pager;  
  10.     private ArrayList<View> pageViews;  
  11.     private LinearLayout layout2;  
  12.     private ArrayList<ImageView> imageViews;  
  13.     private LinearLayout linearLayout;  
  14.     private String title[] = { "one""two""three" };  
  15.     private TextView textView;  
  16.     private ArrayList<View> arrayList;// 用于装载view  
  17.     private final int linerlayout_height = 80;  
  18.   
  19.     /*** 
  20.      * init title and pageview 
  21.      */  
  22.     void Init() {  
  23.         arrayList = new ArrayList<View>();  
  24.         // 获取屏幕宽度  
  25.         int width = getWindowManager().getDefaultDisplay().getWidth()  
  26.                 / title.length;  
  27.         for (int i = 0; i < title.length; i++) {  
  28.             textView = new TextView(this);  
  29.             textView.setText(title[i]);  
  30.             textView.setWidth(width);  
  31.             textView.setHeight(linerlayout_height - 10);  
  32.             textView.setTextSize(20);  
  33.             textView.setTextColor(color.black);  
  34.             textView.setGravity(Gravity.CENTER);  
  35.             textView.setId(i);  
  36.             textView.setPadding(5555);  
  37.             textView.setOnClickListener(this);  
  38.             linearLayout.addView(textView);  
  39.             arrayList.add(textView);  
  40.         }  
  41.   
  42.         pageViews = new ArrayList<View>();  
  43.         View view00 = getLocalActivityManager().startActivity("activity01",  
  44.                 new Intent(this, NullActivity.class)).getDecorView();  
  45.         View view01 = getLocalActivityManager().startActivity("activity01",  
  46.                 new Intent(this, MainActivity1.class)).getDecorView();  
  47.         View view02 = getLocalActivityManager().startActivity("activity02",  
  48.                 new Intent(this, MainActivity2.class)).getDecorView();  
  49.         View view03 = getLocalActivityManager().startActivity("activity02",  
  50.                 new Intent(this, MainActivity3.class)).getDecorView();  
  51.         View view04 = getLocalActivityManager().startActivity("activity01",  
  52.                 new Intent(this, NullActivity.class)).getDecorView();  
  53.         pageViews.add(view00);  
  54.         pageViews.add(view01);  
  55.         pageViews.add(view02);  
  56.         pageViews.add(view03);  
  57.         pageViews.add(view04);  
  58.     }  
  59.   
  60.     void Init_Point() {  
  61.         imageViews = new ArrayList<ImageView>();  
  62.         ImageView imageView;  
  63.         for (int i = 0; i < pageViews.size(); i++) {  
  64.             imageView = new ImageView(this);  
  65.             imageView.setLayoutParams(new LayoutParams(55));  
  66.             imageView.setBackgroundResource(R.drawable.d1);  
  67.             LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(  
  68.                     new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,  
  69.                             LayoutParams.WRAP_CONTENT));  
  70.             layoutParams.leftMargin = 20;  
  71.             layoutParams.rightMargin = 20;  
  72.             layout2.addView(imageView, layoutParams);  
  73.             // 第一个和最后一个让她消失  
  74.             if (i == 0 || i == pageViews.size() - 1) {  
  75.                 imageView.setVisibility(View.GONE);  
  76.             }  
  77.             if (i == 1) {  
  78.                 imageView.setBackgroundResource(R.drawable.d2);  
  79.             }  
  80.             imageViews.add(imageView);  
  81.   
  82.         }  
  83.     }  
  84.   
  85.     public void draw_Point(int index) {  
  86.         for (int i = 1; i < imageViews.size(); i++) {  
  87.   
  88.             if (index == i) {  
  89.                 imageViews.get(i).setBackgroundResource(R.drawable.d2);  
  90.             } else  
  91.                 imageViews.get(i).setBackgroundResource(R.drawable.d1);  
  92.   
  93.         }  
  94.   
  95.     }  
  96.   
  97.     @Override  
  98.     protected void onCreate(Bundle savedInstanceState) {  
  99.         super.onCreate(savedInstanceState);  
  100.         setTitle("jjhappyforever...");  
  101.         setContentView(R.layout.main);  
  102.         pager = (ViewPager) findViewById(R.id.vp_contains);  
  103.         layout2 = (LinearLayout) findViewById(R.id.iv_image);  
  104.         linearLayout = (LinearLayout) findViewById(R.id.mian);  
  105.         // 创建linerlayout的大小  
  106.         LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(  
  107.                 new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,  
  108.                         LayoutParams.FILL_PARENT));  
  109.         layoutParams.height = linerlayout_height;  
  110.         linearLayout.setLayoutParams(layoutParams);  
  111.   
  112.         Init();  
  113.         Init_Point();  
  114.         pager.setAdapter(new myPagerView());  
  115.   
  116.         arrayList.get(0).setBackgroundResource(  
  117.                 R.drawable.renren_sdk_pay_repair_btn_down);  
  118.         pager.setCurrentItem(1);  
  119.   
  120.         pager.setOnPageChangeListener(new OnPageChangeListener() {  
  121.             @Override  
  122.             public void onPageSelected(int arg0) {  
  123.                 draw_Point(arg0);// 描绘分页点,一定要写在这里.  
  124.   
  125.                 // Toast.makeText(MainActivity.this, ""+arg0, 1000).show();  
  126.                 // 如果是第一屏或者是最后一屏禁止滑动,其实这里实现的是如果滑动的是第一屏则跳转至第二屏,如果是最后一屏则跳转到倒数第二屏.  
  127.                 if (arg0 == imageViews.size() - 1 || arg0 == 0) {  
  128.                     if (arg0 == 0) {  
  129.                         pager.setCurrentItem(arg0 + 1);// 第二屏 会再次实现该回调方法实现跳转.  
  130.                         imageViews.get(1).setBackgroundResource(R.drawable.d2);  
  131.                     } else {  
  132.                         pager.setCurrentItem(arg0 - 1);// 倒数第二屏  
  133.                         imageViews.get(arg0 - 1).setBackgroundResource(  
  134.                                 R.drawable.d2);  
  135.                     }  
  136.                 } else {  
  137.                     //一定要卸载else里面,viewpager挺变态的,写在外面,(在你在最左边往左拉的时候会执行两次,最右边也是.)  
  138.                     setBackgroud(arg0 - 1);  
  139.                     Toast.makeText(MainActivity.this"" + arg0, 1000).show();  
  140.                 }  
  141.             }  
  142.   
  143.             @Override  
  144.             public void onPageScrolled(int arg0, float arg1, int arg2) {  
  145.   
  146.             }  
  147.   
  148.             @Override  
  149.             public void onPageScrollStateChanged(int arg0) {  
  150.   
  151.             }  
  152.         });  
  153.     }  
  154.     /*** 
  155.      * 对title 选项卡处理 
  156.      * @param index 
  157.      */  
  158.     public void setBackgroud(int index) {  
  159.         for (int i = 0; i < arrayList.size(); i++) {  
  160.               
  161.             arrayList.get(i).setBackgroundDrawable(new BitmapDrawable());  
  162.   
  163.             if (i == index)  
  164.                 arrayList.get(index).setBackgroundResource(  
  165.                         R.drawable.renren_sdk_pay_repair_btn_down);  
  166.         }  
  167.   
  168.     }  
  169.     /*** 
  170.      * viewpager 的数据源 
  171.      * @author zhangjia 
  172.      * 
  173.      */  
  174.     class myPagerView extends PagerAdapter {  
  175.         // 显示数目  
  176.         @Override  
  177.         public int getCount() {  
  178.             return pageViews.size();  
  179.         }  
  180.   
  181.         @Override  
  182.         public boolean isViewFromObject(View arg0, Object arg1) {  
  183.             return arg0 == arg1;  
  184.         }  
  185.   
  186.         @Override  
  187.         public int getItemPosition(Object object) {  
  188.             // TODO Auto-generated method stub  
  189.             return super.getItemPosition(object);  
  190.         }  
  191.   
  192.         @Override  
  193.         public void destroyItem(View arg0, int arg1, Object arg2) {  
  194.             // TODO Auto-generated method stub  
  195.             ((ViewPager) arg0).removeView(pageViews.get(arg1));  
  196.         }  
  197.   
  198.         /*** 
  199.          * 获取每一个item, 类于listview中的getview 
  200.          */  
  201.         @Override  
  202.         public Object instantiateItem(View arg0, int arg1) {  
  203.             ((ViewPager) arg0).addView(pageViews.get(arg1));  
  204.             return pageViews.get(arg1);  
  205.         }  
  206.   
  207.     }  
  208.     /*** 
  209.      * 点击事件 
  210.      */  
  211.     @Override  
  212.     public void onClick(View v) {  
  213.         switch (v.getId()) {  
  214.         case 0:  
  215.             setBackgroud(0);  
  216.             pager.setCurrentItem(1);  
  217.             break;  
  218.         case 1:  
  219.             setBackgroud(1);  
  220.             pager.setCurrentItem(2);  
  221.             break;  
  222.         case 2:  
  223.             setBackgroud(2);  
  224.             pager.setCurrentItem(3);  
  225.             break;  
  226.   
  227.         default:  
  228.             break;  
  229.         }  
  230.     }  
  231. }  
上面就是所有的代码,其实看起来有点小多,不过都挺容易理解的.还有就是前面我写过一片关于viewpager的介绍,这里也就不过多讲解了.详细请下载源码看吧.

样本示例:

                     

            第一屏左垃                                          第一屏                                               滑向第二屏

                      

            第二屏                                                  第三屏                                           第三屏右拉(会缩回)

     

     源码下载


原创粉丝点击