Android仿网易新闻顶部滚动菜单

         这两天由于有用到类似与网易新闻顶部的滚动菜单的例子,所以为了以后方便复习,就记录一下。由于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]

           最后我们来贴一下显示效果吧:

           


你可能感兴趣的:(android,开源框架)