Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高(2)

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Window;

public class MainActivity extends FragmentActivity
{
 private List<Fragment> mTabContents = new ArrayList<Fragment>();
 private FragmentPagerAdapter mAdapter;
 private ViewPager mViewPager;
// private List<String> mDatas = Arrays.asList("短信1", "短信2", "短信3", "短信4",
//   "短信5", "短信6", "短信7", "短信8", "短信9");
 private List<String> mDatas = Arrays.asList("短信", "收藏", "推荐");

private ViewPagerIndicator mIndicator;

@Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.vp_indicator);

initView();
  initDatas();
  //设置Tab上的标题
  mIndicator.setTabItemTitles(mDatas);
  mViewPager.setAdapter(mAdapter);
  //设置关联的ViewPager
  mIndicator.setViewPager(mViewPager,0);

}

private void initDatas()
 {

for (String data : mDatas)
  {
   VpSimpleFragment fragment = VpSimpleFragment.newInstance(data);
   mTabContents.add(fragment);
  }

mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
  {
   @Override
   public int getCount()
   {
    return mTabContents.size();
   }

@Override
   public Fragment getItem(int position)
   {
    return mTabContents.get(position);
   }
  };
 }

private void initView()
 {
  mViewPager = (ViewPager) findViewById(R.id.id_vp);
  mIndicator = (ViewPagerIndicator) findViewById(R.id.id_indicator);
 }


}

关于我们的ViewPagerIndicator的使用,就两行:

//设置Tab上的标题
mIndicator.setTabItemTitles(mDatas);

//设置关联的ViewPager
mIndicator.setViewPager(mViewPager,0);

其他代码都是初始化ViewPager神马的~~可见,我们的控件写好之后使用起来极其简单~~

好了,大家注意下,布局文件里面有个设置可见Tab个数的属性:zhy:item_count="3"  ;

比如:当item_count=3,而给的TabTitle的List<String>的size也是3的话,就是效果图1的效果~~~

当item_count=4,而给的TabTitle的List<String>的size大于4的话,就是效果图2的效果~~~

其实,我们也支持直接在布局中书写我们的Tab,你完全可以不使用mIndicator.setTabItemTitles(mDatas);取而代之,你可以在布局中定义几个TextView,固定好文本,样式什么的~~其实别的控件我们也是支持的~~~

贴一下Fragment代码~

package com.example.demo_zhy_mms_miui;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class VpSimpleFragment extends Fragment
{
 public static final String BUNDLE_TITLE = "title";
 private String mTitle = "DefaultValue";

@Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState)
 {
  Bundle arguments = getArguments();
  if (arguments != null)
  {
   mTitle = arguments.getString(BUNDLE_TITLE);
  }

TextView tv = new TextView(getActivity());
  tv.setText(mTitle);
  tv.setGravity(Gravity.CENTER);

return tv;
 }

public static VpSimpleFragment newInstance(String title)
 {
  Bundle bundle = new Bundle();
  bundle.putString(BUNDLE_TITLE, title);
  VpSimpleFragment fragment = new VpSimpleFragment();
  fragment.setArguments(bundle);
  return fragment;
 }
}

好了,看完使用方式,有木有一点小激动~~

4、自定义ViewPagerIndicator的实现 1、自定义属性

其实可抽取为自定义的属性很多哈~这里我们就写了一个,就是tab的数量。你完全可以把指示器颜色,文本颜色神马可定制的属性全搞出来~~

我们的控件名称叫做:ViewPagerIndicator

所以我们在values/attr.xml中这么写:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<attr format="integer"></attr>

<declare-styleable>
        <attr />
    </declare-styleable>

</resources>

定义好了,肯定得用,怎么用?在哪用?就不用说了吧。上面的用法已经贴过布局文件了~~记得自定义属性的命名空间要注意哈~~~ 

首先看什么,肯定要有哪些成员变量,和构造里面做了些什么~

2、构造方法及成员变量

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/222f759a6ae386cedcb36c8bdc618a39.html