自定义Indicator

头一次写博客,有点小紧张,写的不好的地方,轻点喷。感谢!

Android令人比较头痛的就是自定义View,当然我也是初学者,对于自定义View应用较少,再加上Android开源的东西特别多,所以我也很少去自己写一下,不过最近公司的一个项目让我很头痛,就是对Tablayout中Indicator这个样式有所要求。在网上能找到的也比较少所以硬着头皮上在鸿洋大神的一个Demo下自己改了改,当然改的比较简单。就是为自己第一次写做个记录。

(鸿洋大神的Demo地址)https://blog.****.net/lmj623565791/article/details/42160391

不多说了上图片。

自定义Indicator


代码也比较简单,主要都是借鉴鸿洋大神提供的方法

更改样式的地方就是给dispatchDraw 更改成了ondraw


  1. /** 
  2.  * 绘制指示器 
  3.  */  
  4. @Override  
  5. protected void dispatchDraw(Canvas canvas)  
  6. {  
  7.     canvas.save();  
  8.     // 画笔平移到正确的位置  
  9.     canvas.translate(mInitTranslationX + mTranslationX, getHeight() + 1);  
  10.     canvas.drawPath(mPath, mPaint);  
  11.     canvas.restore();  
  12.   
  13.     super.dispatchDraw(canvas);  
  14. }  
@Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    canvas.drawPath(mPath, mPaint);
    super.onDraw(canvas);
}

更改了三角形指示器的Path逻辑 

  1.  /** 
  2.      * 初始化三角形指示器 
  3.      */  
  4.     private void initTriangle()  
  5.     {  
  6.         mPath = new Path();  
  7.   
  8.         mTriangleHeight = (int) (mTriangleWidth / 2 / Math.sqrt(2));  
  9.         mPath.moveTo(00);  
  10.         mPath.lineTo(mTriangleWidth, 0);  
  11.         mPath.lineTo(mTriangleWidth / 2, -mTriangleHeight);  
  12.         mPath.close();  
  13.     }  
/**
 * 初始化三角形指示器
 */
private void initTriangle() {
    mPath = new Path();

    mTriangleHeight = (int) (mTriangleWidth * 2 * Math.sqrt(2));
    mPath.moveTo(0, getHeight());
    mPath.lineTo(mInitTranslationX + mTranslationX, getHeight());
    mPath.lineTo(mInitTranslationX + mTranslationX + mTriangleWidth / 2, mTriangleHeight);
    mPath.lineTo(mInitTranslationX + mTranslationX + mTriangleWidth, getHeight());
    mPath.lineTo(getWidth(), getHeight());
}

最后要在onScroll 方法中当偏移量发生改变时调用绘制三角形指示器的方法重新定义Path;

最后附上下载地址:https://download.****.net/download/qq_35874950/10393974