这两天由于有用到类似与网易新闻顶部的滚动菜单的例子,所以为了以后方便复习,就记录一下。由于jar包本身太大,所以为了压缩安装文件体积,我们对jar包做了精简。首先我们需要把该功能要用到的几个类都复制到我们的项目工程中。
主要有:IconPagerAdapter、IcsLinearLayout、PageIndicator、TabPageIndicator这是我们工程中需要用到的几个工具类。当然相应的布局文件也要复制过来的。
接下来,就是我们该去如何使用了。
首先,我们需要创建一个xml文件,该文件中必须要有一个类似与指针的自定义的控件,是让我们来进行滑动的,下面必须要有一个viewpager,是和指针进行绑定的。
<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;"><span style="font-family:KaiTi_GB2312;font-size:14px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 顶部对应的指针所在的布局文件 --> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <com.example.demo.TabPageIndicator android:id="@+id/indicator" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="6"/> <Button android:id="@+id/button" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="+"/> </LinearLayout> <!-- 指针指向的viewpager --> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> <!-- 绑定顶部底部控件的操作,保证1 1对应 --> </LinearLayout></span></span></span>然后我们要创建一个Activity,加载我们刚刚写好的布局文件。然后找到自定义控件和viewpager。
首先要为我们的viewpager控件填充数据:
<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;"><span style="font-family:KaiTi_GB2312;font-size:14px;">class MyPagerAdapter extends PagerAdapter{ @Override public int getCount() { return arrayList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { TextView textView = new TextView(getApplicationContext()); textView.setText(arrayList.get(position)); container.addView(textView); return textView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } @Override public CharSequence getPageTitle(int position) { return arrayList.get(position).toUpperCase(); } }</span></span></span>由上面的代码我们知道这次我们在为viewpager创建适配器时,多了一个方法叫getPageTitle,就是为了我们后面为viewpager设置上面的标题的。
<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;">@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建一个数据适配器 initData(); final ViewPager pager =(ViewPager) findViewById(R.id.pager); if(myPagerAdapter == null){ myPagerAdapter = new MyPagerAdapter(); pager.setAdapter(myPagerAdapter); }else{ myPagerAdapter.notifyDataSetChanged(); } final TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);</span></span>
<span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;"> //该方法是让上面的指针与下面的viewpager进行绑定的操作,必须要添加 indicator.setViewPager(pager); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { arrayList.add("jjjjjjj"); myPagerAdapter.notifyDataSetChanged(); //如果底部viewpager添加过条目,刷新指针 indicator.notifyDataSetChanged(); pager.setCurrentItem(arrayList.size()-1); } }); } private void initData() { arrayList = new ArrayList<String>(); arrayList.add("aaaaaa"); arrayList.add("bbbbbb"); arrayList.add("cccccc"); arrayList.add("dddddd"); arrayList.add("ffffff"); arrayList.add("gggggg"); arrayList.add("hhhhhh"); arrayList.add("iiiiii"); }</span></span>好了基本步骤就是这样。如果有需要此框架和源码的同学,可以Email:[email protected]。
最后我们来贴一下显示效果吧: