先看效果图
自定义view代码如下:
package com.nineoldandroids.view.news;
import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.baidu.screenlock.core.R;
import java.util.ArrayList;
/**
* Created by xxxx on 2017/7/11.
*/
public class MyViewPagerIndicator extends HorizontalScrollView implements View.OnClickListener {
private LinearLayout linearLayout;
private String[] titles;
private ViewPager viewPager;
ArrayList<View> viewList = new ArrayList<View>();
// public MyViewPagerIndicator(Context context, AttributeSet attrs,
// int defStyleAttr, int defStyleRes) {
// super(context, attrs, defStyleAttr, defStyleRes);
// // TODO Auto-generated constructor stub
// }
public MyViewPagerIndicator(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
initView();
}
private void initView() {
// TODO Auto-generated method stub
// 创建线性布局
linearLayout = new LinearLayout(getContext());
this.addView(linearLayout);
}
public MyViewPagerIndicator(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initView();
}
public MyViewPagerIndicator(Context context) {
super(context);
// TODO Auto-generated constructor stub
initView();
}
public void setViewPager(ViewPager viewPager) {
this.viewPager = viewPager;
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
setCurrentItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
public void addTitles(String[] titles) {
this.titles = titles;
viewList.clear();
for (int i = 0; i < titles.length; i++) {
View view = View.inflate(getContext(), R.layout.titles_item, null);
TextView tv_titles = (TextView) view.findViewById(R.id.tv_tab);
TextView tv_line = (TextView) view.findViewById(R.id.tv_line);
viewList.add(view);
tv_titles.setText(titles[i]);
if (i == 0) {
tv_titles.setTextColor(Color.RED);
tv_line.setVisibility(View.VISIBLE);
} else {
tv_titles.setTextColor(Color.BLACK);
tv_line.setVisibility(View.GONE);
}
view.setId(i);
view.setOnClickListener(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
linearLayout.addView(view, params);
}
}
public void removeTitleView(){
if(linearLayout != null){
linearLayout.removeAllViews();
}
}
public int getTitleChildrent(){
if(linearLayout != null){
return linearLayout.getChildCount();
}
return 0;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setCurrentItem(v.getId());
}
public void setCurrentItem(int position) {
// TODO Auto-generated method stub
this.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
int width = linearLayout.getChildAt(position).getWidth();
int middle = getWidth()/2;
int finalDistance = width * position - middle + width/2;
if(finalDistance < 0){
finalDistance = 0;
}else if(finalDistance > width*titles.length - getWidth()){
finalDistance = width*titles.length - getWidth();
}
this.scrollTo(finalDistance, 0);
for (int i = 0; i < titles.length; i++) {
View view = viewList.get(i);
TextView tv_titles = (TextView) view.findViewById(R.id.tv_tab);
TextView tv_line = (TextView) view.findViewById(R.id.tv_line);
if (position == i) {
// 设置传递过来的viewpager的当前页
viewPager.setCurrentItem(i);
tv_titles.setTextColor(Color.RED);
tv_line.setVisibility(View.VISIBLE);
} else {
tv_titles.setTextColor(Color.BLACK);
tv_line.setVisibility(View.GONE);
}
}
}
}
调用方法
private void initViewPagerIndicator() {
String[] array=new String[newsCata.itemList.size()];
for(int i=0;i<newsCata.itemList.size();i++){
array[i] = newsCata.itemList.get(i).title;
}
if(array.length > 0){
viewPagerIndicator.setViewPager(viewPager);
viewPagerIndicator.addTitles(array);
}
}