自定义Indicator
头一次写博客,有点小紧张,写的不好的地方,轻点喷。感谢!
Android令人比较头痛的就是自定义View,当然我也是初学者,对于自定义View应用较少,再加上Android开源的东西特别多,所以我也很少去自己写一下,不过最近公司的一个项目让我很头痛,就是对Tablayout中Indicator这个样式有所要求。在网上能找到的也比较少所以硬着头皮上在鸿洋大神的一个Demo下自己改了改,当然改的比较简单。就是为自己第一次写做个记录。
(鸿洋大神的Demo地址)https://blog.****.net/lmj623565791/article/details/42160391
不多说了上图片。
代码也比较简单,主要都是借鉴鸿洋大神提供的方法
更改样式的地方就是给dispatchDraw 更改成了ondraw
- /**
- * 绘制指示器
- */
- @Override
- protected void dispatchDraw(Canvas canvas)
- {
- canvas.save();
- // 画笔平移到正确的位置
- canvas.translate(mInitTranslationX + mTranslationX, getHeight() + 1);
- canvas.drawPath(mPath, mPaint);
- canvas.restore();
- super.dispatchDraw(canvas);
- }
@Override protected void onDraw(Canvas canvas) { canvas.save(); canvas.drawPath(mPath, mPaint); super.onDraw(canvas); }
更改了三角形指示器的Path逻辑
- /**
- * 初始化三角形指示器
- */
- private void initTriangle()
- {
- mPath = new Path();
- mTriangleHeight = (int) (mTriangleWidth / 2 / Math.sqrt(2));
- mPath.moveTo(0, 0);
- mPath.lineTo(mTriangleWidth, 0);
- mPath.lineTo(mTriangleWidth / 2, -mTriangleHeight);
- mPath.close();
- }
/** * 初始化三角形指示器 */ 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