页面指示器与自定义View
来源:互联网 发布:贴片机工作原理及编程 编辑:程序博客网 时间:2024/05/21 14:09
页面知识器是通过自定义View来实现,简单粗暴,直接上代码,以后可以直接拿来用:
(1)布局代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:tedu="http://schemas.android.com/apk/res/com.example.day0501viewpagerindicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/vPagerId"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.example.day0501viewpagerindicator.CircleIndicator
android:id="@+id/circleIndicator1"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="30dp"
tedu:count="5"
tedu:radius="10" />
</RelativeLayout>
(2)自定义View类
//自定义页面指示器
public class CircleIndicator extends View{
//inflate
public CircleIndicator(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CircleIndicator(Context context, AttributeSet attrs) {
super(context, attrs);
Log.i("TAG", "CircleIndicator(Context context, AttributeSet attrs)");
//获得attrs.xml中名字为"CircleIndicator01"的属性
TypedArray ta=
context.obtainStyledAttributes(attrs,R.styleable.CircleIndicator01);
//获得属性radius的值
radius=ta.getInteger(R.styleable.CircleIndicator01_radius,5);
Log.i("TAG", "radius="+radius);
count=ta.getInteger(R.styleable.CircleIndicator01_count, 0);
}
public CircleIndicator(Context context){
super(context);
}
private float x,y,fillX;//fillX为实心圆x轴位置
private int radius;
private int count;
/**此方法在屏幕尺寸发生变化时调用*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
x=w/2-6*radius;//计算第一个圆的x轴初始位置
fillX=x;
y=30/2;
}
/**构建一个画笔对象*/
private Paint paint=
new Paint(Paint.ANTI_ALIAS_FLAG);
/**重写此方法实现view的绘制
* @param canvar表示画布
* */
@Override
protected void onDraw(Canvas canvas) {
paint.setColor(Color.BLUE);
paint.setStyle(Style.STROKE);//空心
//绘制5个空心圆
for(int i=0;i<count;i++){
canvas.drawCircle(
x+i*radius*3,
y,
10, paint);
}
//绘制一个实心圆
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
canvas.drawCircle(fillX,y, radius-2, paint);
}
public void reDraw(int pos,float offset){
fillX=x+(pos+offset)*radius*3;
//重绘(会重新执行onDraw方法)
invalidate();
}
}
(3)在MainActivity.java中调用
public class MainActivity extends Activity implements OnPageChangeListener {
private ViewPager vPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setViewPager();
setIndicator();
}
private void setViewPager() {
vPager = (ViewPager) findViewById(R.id.vPagerId);
PagerAdapter adapter = new InnerAdapter();
vPager.setAdapter(adapter);
vPager.setOnPageChangeListener(this);
}
private void setIndicator() {
cir = (CircleIndicator) findViewById(R.id.circleIndicator1);
}
private int imgs[]={R.drawable.a,R.drawable.b,R.drawable.d,
R.drawable.e,R.drawable.f};
CircleIndicator cir;
class InnerAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return imgs.length;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
Log.i("TAG","instantiateItem");
ImageView iv = new ImageView(MainActivity.this);
iv.setScaleType(ScaleType.FIT_XY);
iv.setImageResource(imgs[position]);
container.addView(iv);
return iv;
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
Log.i("TAG","onPageScrollStateChanged");
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
Log.i("TAG","onPageScrolled");
cir.reDraw(arg0, arg1);
}
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
Log.i("TAG","onPageSelected");
}
}
attrs文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CircleIndicator01">
<attr name="radius" format="integer"/>
<attr name="count" format="integer"/>
</declare-styleable>
</resources>
- 页面指示器与自定义View
- Android自定义页面指示器
- 自定义页面滑动指示器
- 自定义view:图片显示指示器
- 自定义view实现ViewPager指示器
- 自定义View——图片指示器
- 自定义View实现顶部Tab指示器
- Android 自定义View实现ViewPager指示器
- android 自定义View弯曲滑竿指示器
- Android自定义View--Flyme6的Viewpager指示器
- 自定义ViewPager页面指示器(导航索引)
- 自定义view实现ViewPageIndicator(viewpage指示器) so easy
- Android自定义View之超简单圆形数字指示器
- Android 自定义控件之圆点指示器 View (IndicateDotView)
- 模仿微博ViewPage指示器滑动效果的自定义View
- 自定义View和属性动画ValueAnimator实现圆点指示器
- Android自定义View——滑动变色指示器
- Android自定义view之ViewPager指示器——1
- redis学习备忘
- H.264 Encoder
- 微软消息队列(MSMQ)配置使用小结(c#)
- vs2013下的python远程调试支持(2) :工程调试
- mvp使用详解
- 页面指示器与自定义View
- Bootstrap中datetimepicker使用
- 第一篇
- maven的安装及配置
- Android单元测试<中>(Android官方MVP架构示例项目解析)
- Matlab中FFT快速傅里叶变换函数的应用及其物理意义学习
- HTTP Status 404(The requested resource is not available)的几种解决方案 [问题点数:20分,结帖人defonds]
- [C++]关于重载运算符的一些建议
- Iwfu-贝塞尔曲线配合动画效果的小例子