自定义ViewPagerIndicator(上)
2015-09-08 22:00
344 查看
大家可以参考ViewPagerIndicator开源库,看不太懂的可以先看我这篇博客,我这篇是一步一步从最基础的做起到封装成库
(1)创建一个类,继承View,这是自定义的第一步
(2)添加两个参数的构造方法,初始化三个画笔
(3)绘制静态界面
(4)在PagerIndicator中增加move()方法,改变圆点移动的横坐标
(5)在主程序的xml布局拉上我们的自定义控件
(6)在主程序中的ViewPager中调用move方法
代码地址:
开源库地址:http://download.csdn.net/download/sjc1010592550/9090163
下一篇我们来把图封装成库
(1)创建一个类,继承View,这是自定义的第一步
public class PagerIndicator extends View {}
(2)添加两个参数的构造方法,初始化三个画笔
public PagerIndicator(Context context, AttributeSet attrs) { super(context, attrs); // 设置画笔抗锯齿 paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.RED); paint2 = new Paint(Paint.ANTI_ALIAS_FLAG); paint2.setColor(Color.BLACK); // 空心 paint2.setStyle(Style.STROKE); // 画笔宽度 paint2.setStrokeWidth(2); paint3 = new Paint(Paint.ANTI_ALIAS_FLAG); paint3.setColor(Color.GRAY); }
(3)绘制静态界面
private static final int RADIUS = 30; private static final int CX = 90; private static final int CY = 60; @Override protected void onDraw(Canvas canvas) { // for循环画四个小圆 for (int i = 0; i < 4; i++) { // 指定圆的x,y坐标及圆的半径RADIUS canvas.drawCircle(CX + 3 * RADIUS * i, CY, RADIUS, paint); // 画圆的外圈 canvas.drawCircle(CX + 3 * RADIUS * i, CY, RADIUS, paint2); } // 滑动的小圆点 canvas.drawCircle(CX + offset, CY, RADIUS, paint3); }
(4)在PagerIndicator中增加move()方法,改变圆点移动的横坐标
public void move(int position, float arg) { offset = (int) (arg * 3 * RADIUS) + position * 3 * RADIUS; invalidate(); }
(5)在主程序的xml布局拉上我们的自定义控件
<com.xinbo.demo.PagerIndicator android:id="@+id/pagerIndicator1" android:layout_width="match_parent" android:layout_height="100dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" />
(6)在主程序中的ViewPager中调用move方法
pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrolled(int position, float arg1, int arg2) { indicatorView.move(position, arg1); } @Override public void onPageSelected(int arg0) { } @Override public void onPageScrollStateChanged(int arg0) { } });
代码地址:
开源库地址:http://download.csdn.net/download/sjc1010592550/9090163
下一篇我们来把图封装成库
相关文章推荐
- java内部类的使用小结
- 根据树遍历序列求解树结构
- (转)MySql开启远程连接权限
- iOS:带主标题、副标题、图像类型的表格视图UITableView
- R作图控制坐标轴刻度的个数和标注
- hdu 3232 Crossing Rivers(期望 + 数学推导 + 分类讨论,水题不水)
- 《菊与刀》感触
- 面试常考之二叉树
- 犀牛——第9章类和模块 9.5 类和类型
- 求一个数组中最小的k个数
- Thrift线程和状态机分析
- Chapter 4: Troubleshoot and debug web applications
- 补充缺失日期及对应数据
- mysql mysqldmin 命令行工具 GUI工具
- emmet的常用快捷方式
- 博客搬移
- Android四大组件---BroadcastReseiver(广播接收器)
- 网络常考
- socket机制详解
- leetcode刷题, 总结,记录, 备忘142