三种类型
1.继承现有的系统控件 2.继承View 3.继承ViewGroup
view和viewgroup最大的区别就是viewgroup是有孩子的,getChild()方法
ObjectAnimator 属性动画
ViewPager的高度一般要指定,要不然不显示
viewPager的适配器是继承PagerAdapter
instantiateItem多一步 container.addView(imageView);
class MyPagerAdapter extends PagerAdapter{
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = imageViews.get(position);
container.addView(imageView);
return imageView;
}
/**
*
* @param container viewpager
* @param position 释放的位置
* @param object 释放的页面
*/
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// super.destroyItem(container, position, object);
container.removeView((View) object);
}
@Override
public int getCount() {
return imageViews.size();
}
/**
* 判断view和o是否是同一个实例
* @param view 页面
* @param o
* @return
*/
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
// if(view == o){
// return true;
// }else {
// return false;
// }
return view == o;
}
}
viewpager里面有一个方法监听滑动的位置,实现 OnPageChangeListener
viewpager.addOnPageChangeListener(new MyOnPageChangeListener());
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener
viewPager左右无限滑动,去中间值,设置它的值无限大即可。
//设置中间位置
int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE/2%imageViews.size(); //要保证是imageViews的整数倍
viewpager.setCurrentItem(item);
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
radioGroup点击跳转的方法
public void scrollToPager(int tempIndex) {
if ((tempIndex < 0)) {
tempIndex = 0;
}
if (tempIndex > getChildCount() - 1) {
tempIndex = getChildCount() - 1;
}
currentIndex = tempIndex;
float distanceX = currentIndex * getWidth() - getScrollX();
// scrollTo(currentIndex * getWidth(),0);
scrlloer.startScroll(getScrollX(), getScrollY(), (int) distanceX, 0);
invalidate(); //onDraw() computeScroll() 执行
}
点击事件(自定义接口)
1.定义接口 那里有变化,在那里定义
/**
* 监听页面改变的接口
*/
public interface OnPagerChangeListener {
/**
* 页面改变回调这个方法
*
* @param position 当前页面下标
*/
void onScrollToPager(int position);
}
2.调用方法
private OnPagerChangeListener mOnPagerChangeListener;
/**
* 设置页面改变的监听
*
* @param l
*/
public void setOnPagerChangeListener(OnPagerChangeListener l) {
mOnPagerChangeListener = l;
}
3.用户使用
view.setOnClickListener(new View.OnCLickListener()){}
rg_main.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
/**
*
* @param radioGroup
* @param i 0到5
*/
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
myviewpager.scrollToPager(i);
}
});
4.回调
view.setOnClickListener(new View.OnCLickListener()){ //点击事件被执行
}
//设置页面改变
myviewpager.setOnPagerChangeListener(new MyViewPager.OnPagerChangeListener() {
/**
* 0---5
* @param position 当前页面下标
*/
@Override
public void onScrollToPager(int position) {
rg_main.check(position);
}
});
scrollTo()是正值 从右到左
是负值 从左到右
invalidate() 这个方法是强制绘制 ondraw() computerScroll()方法
在view弹出一层,实现方式 帧布局和relativeLayout布局