Android多屏滑动:ViewPager基础使用及PagerTabStrip先天缺陷(附

最近要用ViewPager,看了几个人的帖子都说的不太明白,干脆自己写个demo总结下。例子很简单,Activity里有三个界面可以滑动,每一个界面都有一个button并设置好了监听。PagerTabStrip也就是滑动时的那个标识线,在View的下方。下为代码:

activity_main.xml(主布局)

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerInParent="true" ><android.support.v4.view.PagerTabStripandroid:id="@+id/pagertab"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"/></android.support.v4.view.ViewPager></RelativeLayout>下面是三个view布局,都差不多:

first_pager_layout.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@android:color/holo_blue_bright"><Buttonandroid:id="@+id/btn_in_first"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请点击"android:layout_gravity="center"/></LinearLayout>second_pager_layout.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@android:color/holo_green_light"> <Buttonandroid:id="@+id/btn_in_second"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请点击"android:layout_gravity="center"/></LinearLayout>third_pager_layout.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@android:color/holo_red_light"><Buttonandroid:id="@+id/btn_in_third"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请点击"android:layout_gravity="center"/></LinearLayout>MainActivity.java(这是主程序里,在里面实例化ViewPager并设置它的适配器)package org.yanzi.testviewpager1;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.os.Bundle;import android.support.v4.view.PagerTabStrip;import android.support.v4.view.PagerTitleStrip;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {List<View> mViews = new ArrayList<View>();String[] mTitles = {"页面1", "页面2", "页面3"};MyPagerAdapter pagerAdapter;PagerTabStrip pagerTabStrip;PagerTitleStrip pagerTitleStrip;ViewPager viewPager;View view1, view2, view3;Button btn1, btn2, btn3;BtnListener btnListener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initUI();LayoutInflater flater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);view1 = flater.inflate(R.layout.first_pager_layout, null);view2 = flater.inflate(R.layout.second_pager_layout, null);view3 = flater.inflate(R.layout.third_pager_layout, null);mViews.add(view1);mViews.add(view2);mViews.add(view3);pagerAdapter = new MyPagerAdapter(mViews, mTitles);viewPager.setAdapter(pagerAdapter);viewPager.setCurrentItem(1);//设置pagerTabStrippagerTabStrip.setTabIndicatorColor(Color.RED);pagerTabStrip.setTextColor(Color.RED);pagerTabStrip.setClickable(false);pagerTabStrip.setTextSpacing(40);pagerTabStrip.setBackgroundColor(Color.GRAY);pagerTabStrip.setDrawFullUnderline(true);/*pagerTitleStrip.setTextColor(Color.RED);pagerTitleStrip.setTextSpacing(40);*///ViewPager滑动监听viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stubshowToast("切换至:" + mTitles[arg0]);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}});initBtns();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}private void initUI(){viewPager = (ViewPager)findViewById(R.id.viewpager);pagerTabStrip = (PagerTabStrip)findViewById(R.id.pagertab);//pagerTitleStrip = (PagerTitleStrip)findViewById(R.id.pagertab);}private void initBtns(){if(view1 != null){btn1 = (Button)view1.findViewById(R.id.btn_in_first);}if(view2 != null){btn2 = (Button)view2.findViewById(R.id.btn_in_second);}if(view3 != null){btn3 = (Button)view3.findViewById(R.id.btn_in_third);}btnListener = new BtnListener();btn1.setOnClickListener(btnListener);btn2.setOnClickListener(btnListener);btn3.setOnClickListener(btnListener);}class BtnListener implements View.OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()){case R.id.btn_in_first:showToast("您点击了第一个界面");break;case R.id.btn_in_second:showToast("您点击了第2个界面");break;case R.id.btn_in_third:showToast("您点击了第3个界面");break;default:break;}}}private void showToast(String s){Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();}}MyPagerAdapter.java(这是ViewPager的适配器,继承PagerAdapter,将其单独写到一个文件里了)package org.yanzi.testviewpager1;import java.util.List;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;public class MyPagerAdapter extends PagerAdapter {private List<View> mListViews;private String[] mTitles;public MyPagerAdapter(List<View> views, String[] titles){this.mListViews = views;this.mTitles = titles;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mListViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn (arg0==arg1);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODO Auto-generated method stubcontainer.removeView(mListViews.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {// TODO Auto-generated method stubcontainer.addView(mListViews.get(position), 0);return mListViews.get(position);}@Overridepublic CharSequence getPageTitle(int position) {// TODO Auto-generated method stubreturn mTitles[position];}}要点:

1、ViewPager说白了就是个控件,在使用时包名要带全是android.support.v4.view.ViewPager。由于我的ADT-Bundle版本比较高,这个包默认自带了,且默认是随apk打包导出的。如下图:

但我们好多人没想过,勇敢的冷静的理智的去接受失败,

Android多屏滑动:ViewPager基础使用及PagerTabStrip先天缺陷(附

相关文章:

你感兴趣的文章:

标签云: