自定义Indicator步骤,笔记
来源:互联网 发布:杭州淘宝培训机构 编辑:程序博客网 时间:2024/05/16 02:08
1.MyIndecator extends LinearLayout
2.构造方法:
1,假如有自定义属性则获取自定义属性
2,初始化画笔mPaint:
setStyle()
画笔样式分三种:
1.Paint.Style.STROKE:描边
2.Paint.Style.FILL_AND_STROKE:描边并填充
3.Paint.Style.FILL:填充
3.重写disPatchDraw(Canvas canvas),该方法为容器下的孩子绘制,onDraw()是为自己绘制
canvas.save();
canvas.translate(x,y) //移动要特定的位置开始绘制
canvas.drawPath(mPath,mPaint)//画图
canvas.restore(); 一定要加,不然会出现读取不了title的现象
4.重写onSizeChanged(intw,inth,intoldw,intoldh)只有View的大小发生变化才会调用
确定绘制的位置与指示器的宽度高度等
顺便调用initView();方法画出一个Indicator图形
5.initView();
初始化mPath,用moveTo(x,y),lineTo(x,y),close()方法画出一个指示器
6.重写onSroll(int position,float offset),其中offset为一个偏移百分比,取值在-1~0~1之间。
tabWidth=getWidth()/可以看到的tab的数量visibleCount;
tranlationX=tabWidth*position+tabWidth*offset;//计算出画板要移动的位置,没有算上指示器开始的偏移量
if(position>=(visibleCount-2)&&offset>0&&getChildCount()>visibleCount){ if(visibleCount!=1) { this.scrollTo((position - (visibleCount - 2)) * tabWidth + (int) (tabWidth * offset), 0); }else { this.scrollTo(position*tabWidth+(int)(tabWidth*offset),0); }}invalidate();
7.重写onFinishInflate()动态加载布局,在xml加载完成时回调方法
for(int i=0;i<cCount;i++){ View view=getChildAt(i); LinearLayout.LayoutParams lp = (LayoutParams) view.getLayoutParams(); lp.width=getScreenWidth()/visibleCount; view.setLayoutParams(lp); }//根据可见的tab数量分配 子child 空间
setTabClickEvent();8.写setTabClickEvent()方法令到点击tab时会跳转到tab对应的Fragment
循环为每个子View.setOnClickListener,设置view.setCurrentItem(i);
9.重写一个回调接口
public interface PageOnchangeListenr{ public void onPageScrolled(int i, float v, int i1); public void onPageSelected(int i); public void onPageScrollStateChanged(int i); }public PageOnchangeListenr mListener;public void addOnPageChangeListener(PageOnchangeListenr listenr){ this.mListener=listenr;}//绑定mViewPager与实现接口回调 private ViewPager mViewPager; public void setViewPager(ViewPager viewPager,int pos){ mViewPager=viewPager; mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { scroll(i,v); if(mListener!=null) mListener.onPageScrolled(i,v,i2); } @Override public void onPageSelected(int i) { if(mListener!=null) mListener.onPageSelected(i); } @Override public void onPageScrollStateChanged(int i) { if(mListener!=null) mListener.onPageScrollStateChanged(i); } }); mViewPager.setCurrentItem(pos); }
- 自定义Indicator步骤,笔记
- 自定义Indicator
- 自定义控件Indicator
- 自定义 Tab Indicator
- 自定义ViewPager Indicator
- 自定义Indicator轮播图--binbinyang
- 图片仿TabLayout Indicator , 自定义Indicator
- Indicator
- Android自定义View之导航指示Indicator
- 【Android】自定义控件——仿天猫Indicator
- 如何 TabHostFragment自定义 tab键(indicator)
- unity indicator下菜单自定义的解决方法
- Android自定义控件——Indicator
- android上FragmentTabHost实现自定义Tab Indicator
- 自定义Indicator 脑洞打开的指示器
- IOS开发之——自定义的Activity Indicator View
- IOS开发之——自定义的Activity Indicator View
- Android自定义控件--无限轮播Banner和Indicator实现
- HDU 4403 A very hard Aoshu problem (暴力+状态压缩)
- WifiBoxAlarmManager 定时小结
- redis 发布订阅
- Cg入门13: Vertex Shader - 几何变换 —顶点位移
- C#冒泡排序
- 自定义Indicator步骤,笔记
- NGUI UILable 换行
- [PHP实例] php Socket发送邮件验证邮箱的真实有效性而非格式
- Nutch2.3.1 新闻分类爬虫
- c#调用C++DLL参数对应
- 【API设计风格—RESTful】:什么是RESTful(一)
- 微信公众号(服务号)接入开发(1)
- poj 1182 带权并查集
- Shell编程(七)---函数