Three types
1. Inherit existing system control 2. Inherit View 3. Inherit ViewGroup
The biggest difference between view and viewgroup is that viewgroup has children, getChild() method
ObjectAnimator attribute animation
Generally, the height of ViewPager should be specified, otherwise it will not be displayed
The adapter of viewPager is inherited from pager adapter
instantiateItem one more step 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 Location of release * @param object Released pages */ @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(); } /** * Judge whether view and o are the same instance * @param view page * @param o * @return */ @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { // if(view == o){ // return true; // }else { // return false; // } return view == o; } }
There is a method in viewpager to monitor the sliding position and implement OnPageChangeListener
viewpager.addOnPageChangeListener(new MyOnPageChangeListener()); class MyOnPageChangeListener implements ViewPager.OnPageChangeListener
The viewPager slides left and right infinitely. Remove the middle value and set its value to infinity.
//Set middle position int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE/2%imageViews.size(); //Make sure it's an integral multiple of imageViews viewpager.setCurrentItem(item); @Override public int getCount() { return Integer.MAX_VALUE; }
radioGroup click jump method
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() execution }
Click event (custom interface)
1. Define the interface. There are changes. Define it there
/** * Interface for monitoring page changes */ public interface OnPagerChangeListener { /** * Page change callback * * @param position Current page subscript */ void onScrollToPager(int position); }
2. Call method
private OnPagerChangeListener mOnPagerChangeListener; /** * Set up monitoring of page changes * * @param l */ public void setOnPagerChangeListener(OnPagerChangeListener l) { mOnPagerChangeListener = l; }
3. User use
view.setOnClickListener(new View.OnCLickListener()){}
rg_main.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { /** * * @param radioGroup * @param i 0 To 5 */ @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { myviewpager.scrollToPager(i); } });
4. callbacks
view.setOnClickListener(new View.OnCLickListener()) {/ / click event is executed
}
//Settings page change myviewpager.setOnPagerChangeListener(new MyViewPager.OnPagerChangeListener() { /** * 0---5 * @param position Current page subscript */ @Override public void onScrollToPager(int position) { rg_main.check(position); } });
scrollTo() is a positive value right to left
It's negative from left to right
invalidate() this method forces the ondraw() computerScroll() method to be drawn
Pop up a layer in the view to realize frame layout and relativeLayout layout