运行效果
在编写代码之前,先看看最终运行效果:
代码编写
首先自定义一个控件,名叫ViewPagerIndicate,继承HorizontalScrollView,实现View.OnClickListener接口监听,代码如下:
package com.example.viewpagerindicate.view;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class ViewPagerIndicate extends HorizontalScrollView implements OnClickListener {
private Context mContext;
private LayoutInflater mInflater;
private ViewPager mViewPager;
//onMeasure是否准备完成
private boolean isMeasureOk;
//是否可以绘制下划线
private boolean isDrawOK;
//HorizontalScrollView只能有1个子View(这里用线性布局)
private LinearLayout mWapper;
//标签
private ArrayList<TextView> mTextViews;
//标签正常颜色和高亮颜色
private int mTextNormalColor, mTextHighlightColor;
//总宽度
private int mTotalWidth;
//1个标签的宽和高
private int mTabWidth, mTabHeight;
private Paint mPaint;
//下划线的位置
private float mTranslateX;
public ViewPagerIndicate(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mInflater = LayoutInflater.from(context);
mPaint = new Paint();
isMeasureOk = isDrawOK = false;
}
/**
* 重置下划线的粗细和颜色
* @param size 下划线粗细
* @param color 下划线颜色
*/
public void resetUnderline(int size, int color) {
mPaint.setStrokeWidth((int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, size, mContext.getResources().getDisplayMetrics()));
mPaint.setColor(color